如何在命令行参数中添加可选标志?
例如。所以我可以写
python myprog.py
或
python myprog.py -w
我试过
parser.add_argument('-w')
但我只是收到一条错误消息
Usage [-w W]
error: argument -w: expected one argument
我认为它需要-w选项的参数值。接受国旗的方式是什么?
我发现http://docs.python.org/library/argparse.html在这个问题上相当不透明。
答案 0 :(得分:417)
正如你所知,参数w在命令行上期望-w之后的值。如果您只是想通过设置变量True
或False
来切换开关,请查看http://docs.python.org/dev/library/argparse.html#action(特别是store_true和store_false)
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('-w', action='store_true')
编辑:正如Sven所指出的,在这种情况下,默认值是多余的。
答案 1 :(得分:32)
添加快速代码段以准备执行:
来源: myparser.py
import argparse
parser = argparse.ArgumentParser(description="Flip a switch by setting a flag")
parser.add_argument('-w', action='store_true')
args = parser.parse_args()
print args.w
<强>用法:强>
python myparser.py -w
>> True
答案 2 :(得分:3)
您的脚本是正确的。但是默认情况下为None类型。因此,它认为除args.argument_name变量以外的其他任何值都为true。
我建议您添加一个action =“ store_true”。这将成为True / False类型的标志。如果使用,则为True,否则为False。
import argparse
parser = argparse.ArgumentParser('parser-name')
parser.add_argument("-f","--flag",action="store_true",help="just a flag argument")
用法
$ python3 script.py -f
使用args.f进行解析后,它返回true,
args = parser.parse_args()
print(args.f)
>>>true
答案 3 :(得分:-5)
这是一种快速的方法,除sys
之外不需要任何其他内容..但功能有限:
flag = "--flag" in sys.argv[1:]
[1:]
,则 --flag