446

如何在命令行参数中添加可选标志?

例如。所以我可以写

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在这个问题上相当不透明。

4

4 回答 4

717

正如你所拥有的,参数在命令行w之后需要一个值。-w如果您只是想通过设置变量True或来翻转开关False,请查看此处(特别是 store_true 和 store_false)

import argparse

parser = argparse.ArgumentParser()
parser.add_argument('-w', action='store_true')

其中action='store_true'暗示default=False

相反,您可以拥有action='store_false',这意味着default=True

于 2011-11-24T15:01:57.423 回答
71

添加一个快速片段以使其准备好执行:

来源: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
于 2016-04-19T06:53:00.670 回答
9

你的剧本是对的。但默认情况下是 None 类型。所以它认为除了 None 之外的任何其他值都是 true 分配给 args.argument_name 变量。

我建议你添加一个 action="store_true"。这将使真/假类型的标志。如果使用它的 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
于 2020-07-25T07:38:37.870 回答
-12

这是一种快速的方法,除了..之外不需要任何东西sys,尽管功能有限:

flag = "--flag" in sys.argv[1:]

[1:]如果完整的文件名是--flag

于 2016-05-03T02:07:13.303 回答