没有参数的Python argparse命令行标志

int*_*tar 305 python command-line-arguments argparse

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

例如.所以我可以写

python myprog.py 
Run Code Online (Sandbox Code Playgroud)

要么

python myprog.py -w
Run Code Online (Sandbox Code Playgroud)

我试过了

parser.add_argument('-w')
Run Code Online (Sandbox Code Playgroud)

但我只是收到一条错误消息

Usage [-w W]
error: argument -w: expected one argument
Run Code Online (Sandbox Code Playgroud)

我认为它意味着它需要-w选项的参数值.接受国旗的方式是什么?

我在这个问题上发现http://docs.python.org/library/argparse.html相当不透明.

Jdo*_*dog 478

正如你所拥有的那样,参数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')
Run Code Online (Sandbox Code Playgroud)

编辑:正如斯文所指出的,在这种情况下,默认值是多余的.

  • @Jdog,知道为什么这对我不起作用吗?`w` 总是 `False`。 (4认同)

use*_*754 40

添加快速代码段以准备执行:

资料来源: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
Run Code Online (Sandbox Code Playgroud)

用法:

python myparser.py -w
>> True
Run Code Online (Sandbox Code Playgroud)


小智 6

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

我建议您添加一个 action="store_true"。这将使 True/False 类型的标志。如果使用它的 True else False。

import argparse
parser = argparse.ArgumentParser('parser-name')
parser.add_argument("-f","--flag",action="store_true",help="just a flag argument")
Run Code Online (Sandbox Code Playgroud)

用法

$ python3 script.py -f
Run Code Online (Sandbox Code Playgroud)

在用 args.f 检查时解析后,它返回 true,

args = parser.parse_args()
print(args.f)
Run Code Online (Sandbox Code Playgroud)
>>>true
Run Code Online (Sandbox Code Playgroud)