如果你正在寻找一个二进制标志,那么argparse操作store_true或store_false提供的正是这个。这种方法在@Jdog给出的公认答案中得到了很好的解释。
官方文件也相当清楚。我只会用一行来完成这个例子,所以要非常清楚地说明store_true/store_false是如何作用的:
>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('--foo', action='store_true')
>>> parser.add_argument('--fov', action='store_true') # this is not in the docs!
>>> parser.add_argument('--bar', action='store_false')
>>> parser.add_argument('--baz', action='store_false')
>>> parser.parse_args('--foo --bar'.split()) # --baz and --fov are missing
Out[4]: Namespace(bar=False, baz=True, foo=True, fov=False) # mind the fov=False
稍微强大一点的方法是使用count动作。在运行命令时设置详细级别时,通常已经使用过这种类型的标志。
例如ssh的verbose模式标志-v是一个计数器:
-v详细模式。使ssh打印有关其进度的调试消息。这有助于调试连接、身份验证和配置问题。多个- v
选项增加了冗余。最大值为3。
所以如果你运行ssh,它不是冗长的,ssh -v是稍微冗长的,ssh -vvv是最冗长的。
使用python中的argparse,这样一个计数器标志可以定义如下:
parser.add_argument('--verbose', '-v', action='count', default=0)
如果你想使用它作为一个boolena (True/False)标志,那么你需要强制转换参数。Verbose转换为boolean。您可以显式地自己执行此操作,也可以依赖条件语句,如if args。详细:…
下面是一个完整的工作示例来说明如何使用counter标志:
使用脚本test.py:
#!/usr/bin/env python3
# test.py
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--verbose', '-v', action='count', default=0)
args = parser.parse_args()
if args.verbose:
print('verbose')
print(f'verbosity level: {args.verbose}')
else:
print('non-verbose')
您将得到以下输出:
python test.py
>> non-verbose
python test.py -v
>> verbose
>> verbosity level: 1
python test.py -vvv
>> verbose
>> verbosity level: 3