我有一个脚本,我向用户询问要执行的预定义操作的列表。我还希望能够在用户没有定义任何内容时采取特定的操作列表。然而,似乎试图将这两者结合在一起是不可能的。python argparse - 带选项的可选append参数
当用户没有给出参数,他们收到一个错误,默认的选择是无效
acts = ['clear','copy','dump','lock']
p = argparse.ArgumentParser()
p.add_argument('action', nargs='*', action='append', choices=acts, default=[['dump', 'clear']])
args = p.parse_args([])
>>> usage: [-h] [{clear,copy,dump,lock} [{clear,copy,dump,lock} ...]]
: error: argument action: invalid choice: [['dump', 'clear']] (choose from 'clear', 'copy', 'dump', 'lock')
当他们这样做定义一组动作,得到的命名空间拥有了用户的操作追加到默认,而不是替换默认
acts = ['clear','copy','dump','lock']
p = argparse.ArgumentParser()
p.add_argument('action', nargs='*', action='append', choices=acts, default=[['dump', 'clear']])
args = p.parse_args(['lock'])
args
>>> Namespace(action=[['dump', 'clear'], ['dump']])
我不确定这是否已被类似的bug解决了报告:http://bugs.python.org/issue9625。处理这种情况的一种可能方法是使用自定义操作,而不是使用`choices`关键字。看看[这个问题]上接受的答案(http://stackoverflow.com/questions/4194948/python-argparse-is-there-a-way-to-specify-a-range-in-nargs) – Chris 2011-12-15 22:04:32