Python argparse 命令行标志无参数

517 投票
5 回答
298300 浏览
提问于 2025-04-17 07:00

我该如何在命令行参数中添加一个可选的标志呢?

比如,我想这样写:

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 在这个问题上讲得有点模糊。

5 个回答

13

你的脚本是对的。但是默认情况下,它的类型是None。这意味着只要给args.argument_name这个变量赋了其他值,它就会被认为是“真”。

我建议你加上action="store_true"。这样就可以创建一个真/假类型的标志。如果使用了这个标志,它就是“真”,否则就是“假”。

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,它会返回“真”,

args = parser.parse_args()
print(args.f)
>>>true
81

这里有一个简单的代码片段,方便你直接执行:

来源: 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
840

你现在的代码中,参数 w 在命令行中需要在 -w 后面跟一个值。如果你只是想通过设置一个变量为 TrueFalse 来切换某个功能,可以看看 这里(特别是 store_truestore_false)。

import argparse

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

其中 action='store_true' 表示默认值是 False

相反,你也可以使用 action='store_false',这时默认值就是 True

撰写回答