当我们指定可选参数时使用argparse模块时,我们可以多次指定它,例如
my_app --arg a --arg b --arg c --arg d
结果Namespace
中的最终值是命令行中最后指定的参数的值(示例中为“d”)。可以检测到这种情况吗?我想以某种方式通知用户这种行为。
我可以制作自定义Action
,但我不想重新定义所有标准操作,例如store_true
。以某种方式包装标准add_argument(...)
函数会很酷。
提前致谢!
答案 0 :(得分:2)
您可以通过创建自己的Action来实现,但是如果没有Action,可以使用action='append'
的{{1}}参数来执行此操作:
add_argument
运行上面没有参数:
import argparse
import sys
p = argparse.ArgumentParser()
p.add_argument('--arg', action='append')
print("0 options:", p.parse_args([]))
print("1 option:", p.parse_args("--arg a".split()))
print("2 options:", p.parse_args("--arg a --arg b".split()))
print("3 options:", p.parse_args("--arg a --arg b --arg c".split()))
print()
args = p.parse_args()
if args.arg:
if len(args.arg) > 1:
sys.exit("Option --arg specified multiple times!")
使用1个参数运行:
$ python3 par.py
0 options: Namespace(arg=None)
1 option: Namespace(arg=['a'])
2 options: Namespace(arg=['a', 'b'])
3 options: Namespace(arg=['a', 'b', 'c'])
使用2个(或更多)参数运行可以转到$ python3 par.py --arg a
0 options: Namespace(arg=None)
1 option: Namespace(arg=['a'])
2 options: Namespace(arg=['a', 'b'])
3 options: Namespace(arg=['a', 'b', 'c'])
:
sys.exit()