- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有代码:
parser = ArgumentParser()
parser.add_argument('--verbose', action='count', default=0, help='debug output')
subparsers = parser.add_subparsers(help='subparser')
parser1 = subparsers.add_parser('action', help='Do something')
parser1.add_argument('--start', action='store_true', help='start')
parser1.add_argument('--stop', action='store_true', help='stop')
parser2 = subparsers.add_parser('control', help='Control something')
parser2.add_argument('--input', action='store_true', help='start')
parser2.add_argument('--output', action='store_true', help='stop')
args = parser.parse_args()
然后我可以运行脚本:
script.py --verbose action --start
script.py --verbose control --output
但不是
script.py action --start --verbose
script.py control --output --verbose
我可以将选项 --verbose 转移到最后,而不将其添加到每个组吗?
最佳答案
详细说明我的评论:
argparse
按顺序解析输入列表 (sys.argv[1:]),将字符串与操作(add_argument
对象)匹配。所以如果命令是
python foo.py --arg1=3 cmd --arg2=4
它尝试处理“--arg1”,然后是“cmd”。如果“cmd”与子解析器名称匹配,则它将解析委托(delegate)给该解析器,将剩余的字符串交给它。如果cmd
子解析器可以处理 --arg2
, 它以 unrecognized
的形式返回争论。
主解析器不恢复解析。相反,它只是处理 unrecognized
像往常一样参数 - 如果使用 parse_args
会引发错误,并在 extras
中返回它们如果使用 parse_known_args
则列出.
所以如果你想把--verbose
最后,您将其定义为子解析器参数。或者在 parse_known_args
之后做一些进一步的解析.
您可以定义 --verbose
在两个级别上,尽管有时这样的定义会产生冲突(尤其是在默认值不同的情况下)。
parents
机制可用于减少输入量,但您也可以轻松编写自己的实用函数。
关于python - argparse 中子解析器之后的可选参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41055680/
我正在尝试用 Swift 编写这段 JavaScript 代码:k_combinations 到目前为止,我在 Swift 中有这个: import Foundation import Cocoa e
我是一名优秀的程序员,十分优秀!