我有一个脚本,要求用户提供要执行的预定义操作的列表。我还希望当用户没有定义任何东西时,能够假定一个特定的操作列表。然而,似乎不可能同时做到这两个。
当用户没有给出参数时,他们会收到一个错误,默认选择无效
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']])
您需要什么可以使用定制的
argparse.Action
完成,如下例所示:脚本的输出是:
文档(http://docs.python.org/dev/library/argparse.html#default)中说:
那么,如果我们这样做了:
我们得到了我们所期望的
问题是当您将列表作为默认值时。 但我在医生那里见过
所以,我不知道
不管怎样,这里有一个解决方法,可以完成您想要的工作:
您可以测试用户是提供操作(在这种情况下,将其作为必需的position参数进行分析),还是不提供操作(在这种情况下,将其作为默认的可选参数进行分析):
运行时,将生成以下结果:
您可能还有其他的解析选项。在这种情况下,可以使用
parse_known_args
解析其他选项,然后在第二次传递中处理unknown
参数:运行时,将生成以下结果:
相关问题 更多 >
编程相关推荐