这是一个解析器,它会按顺序重复收集这些参数:
In [1]: import argparse
In [2]: parser = argparse.ArgumentParser()
In [3]: parser.add_argument('--doA', dest='cmd', const='doA', action='append_con
...: st');
In [4]: parser.add_argument('--doB', dest='cmd', const='doB', action='append_con
...: st');
测试:
In [5]: args = parser.parse_args('--doA --doB --doA --doA'.split())
In [6]: print(args)
Namespace(cmd=['doA', 'doB', 'doA', 'doA'])
做点什么:
In [7]: for action in args.cmd:
...: print('action:', action)
...:
action: doA
action: doB
action: doA
action: doA
如果我已经定义:
def doA(*args):
# do something
pass
并使用const=doA,那么args.cmd 列表将是
Namespace(cmd=[doA, doB, ...])
我们可以写
for action in args.cmd:
action(arguments)
argparse docs 有类似这样的子解析和set_default 命令。
如果这些是您接受的唯一论点,那将是过度杀戮。但如果有其他需要argparse 的选项,这将适合。但接受一个
parser.add_argument('--cmd', nargs='*', ...)
会好的。它可以使用choices 来限制输入字符串,甚至可以使用type 函数将字符串转换为函数对象。