我有几个位置和可选参数(使用argparser),现在需要添加一个不带参数/值的标志,实质上是调用方法。
让我们说这是当前的解析器:
./run.py arg1 arg2 -i input
这是简短的示例代码
parser.add_argument("arg1",
help="arg1 handler")
parser.add_argument("arg2",
help="arg2 handler")
parser.add_argument('-i', dest='input_handler',
help="input handler")
当你使用--help
导致显示帮助时(优先于其他标志),我正在寻找的东西是类似的。 所以我想支持一个特殊的标志(比如--help)而不用担心在命令行中提供所有其他标志。
所以这样的事情也应该有效:
./run.py --list
我正在考虑使用'store_true'
来获取没有值的标志,但它没有优先于其他标志。
非常感谢任何意见/建议
答案 0 :(得分:0)
你可以使用这样的东西:
parser = argparse.ArgumentParser()
parser.add_argument('--list',action='store_true',help='perform some task')
parser.add_argument('--input',type=str, required=False, help='input variable')
args = parser.parse_args()
if args.list:
perform_function()
elif args.input is not None:
function(args.input)
...
答案 1 :(得分:0)
您错过了nargs
字段。
#!/usr/bin/env python
"""Runs using two args and an option input
Usage: ./run.py arg1 arg2 -i input
Arguments:
arg1/arg2: any order
Options:
-i input
"""
import argparse
parser = argparse.ArgumentParser(usage=__doc__)
parser.add_argument("pos_args", help="Unknown pos args sequence", nargs=2) # '+' for any number of args
parser.add_argument('-i', dest='input_handler', help="input handler")
args = parser.parse_args()
arg1, arg2 = args.pos_args
答案 2 :(得分:0)
-h
帮助优先,因为它在遇到时强制sys.exit。也就是说,它有一个Action类打印帮助然后退出。
有一个version
动作类可以执行类似操作 - 显示消息并退出。
所有其他操作都会在args
命名空间中存储内容,并继续解析。 missing arguments
投诉在解析结束时产生,当它推断某些位置(或其他必需)参数未被填充时。
我可以想到几个解决方案:
定义一个以help
或version
为模型的新Action子类。如果你采取这种方式,你应该进行开发,所以你确切知道发生了什么。
将您的位置更改为可选的位置。 nargs='?'
是可能的,但标记更好。在这种情况下,input_handler
可以是简单的store_true
操作。
使用subparsers。 input_handler
将是不带参数的解析器。其他subparser将采取2个位置。查看subparsers文档和set_defaults
注释。