我有一个脚本,我在其中询问用户要执行的预定义操作列表。我还希望能够在用户未定义任何内容时假设特定的操作列表。但是,似乎不可能同时完成这两项工作。
当用户不提供任何参数时,他们会收到默认选择无效的错误
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']])