如果您正在寻找二进制标志,则
argparse actions 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')
>>> parser.add_argument('--bar', action='store_false')
>>> parser.add_argument('--baz', action='store_false')
>>> parser.parse_args('--foo --bar'.split())
Out[4]: Namespace(bar=False, baz=True, foo=True, fov=False)
一个稍微更强大的方法是使用count
动作。通常在运行命令时已经使用了这种类型的标记来设置详细程度。
例如,ssh
的详细模式标志 -v
是一个计数器:
-v 详细模式。使 ssh 打印有关其进度的调试消息。这对于调试连接、验证和配置问题非常有帮助。多个 -v 选项会增加详细程度。最大值为3。
因此,如果您运行ssh
,它是无详细信息的,ssh -v
稍微详细一些,ssh -vvv
则是最大详细程度。
在 Python 中,可以使用 argparse 定义这样一个计数器标志,如下所示:
parser.add_argument('--verbose', '-v', action='count', default=0)
如果您想将其用作布尔值(
True
/
False
)标志,则需要将
args.verbose
转换为布尔值。您可以自己明确地执行此操作,也可以依赖条件语句,例如
if args.verbose: ...
。
这里是一个完整的工作示例,以说明如何使用计数器标志:
使用脚本
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