已经指定了detect参数(argparse)

时间:2015-09-29 12:54:42

标签: python python-2.7 argparse

当我们指定可选参数时使用argparse模块时,我们可以多次指定它,例如

my_app --arg a --arg b --arg c --arg d

结果Namespace中的最终值是命令行中最后指定的参数的值(示例中为“d”)。可以检测到这种情况吗?我想以某种方式通知用户这种行为。

我可以制作自定义Action,但我不想重新定义所有标准操作,例如store_true。以某种方式包装标准add_argument(...)函数会很酷。

提前致谢!

1 个答案:

答案 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()