import argparse
parser_sub = subparsers.add_parser('files')
parser_sub.add_argument(
'--file-name',
action='store',
dest='filename',
nargs='*')
options = parser.parse_args()
输出:错误:参数太少。
根据此链接:https://bugs.python.org/issue9253它指出子解析器不能是可选的。这种行为可以改变吗?
我希望我的子命令是可选的。如何通过 python 2.6 中的 argparse 实现此目的?
最佳答案
没有太多可以添加到该错误/问题 https://bugs.python.org/issue9253 .
subparsers
是一种特殊的位置参数。通常,使位置可选的唯一方法是使用 nargs='?'
参数。
正如错误问题中所详述的,在最近的版本中,子解析器已无意中成为可选的。这是解析器检查所需参数的方式发生变化的结果。
我不会说不可能将此行为改进到 2.6 版本中,但这不是只用一两个参数值就能完成的事情。我认为这需要很好地理解这个错误/问题。它要么需要对 parse_args
进行代码更改,要么需要自定义 subparser
Action 类。
在早期版本中,丢失的子解析器字符串将被以下方式捕获:
# if we didn't use all the Positional objects, there were too few
# arg strings supplied.
if positionals:
self.error(_('too few arguments'))
其中positionals
是位置操作的列表。当处理位置时,它将从此列表中删除。即使没有字符串,带有 ?
和 '*' 的操作也会被处理(因为接受空列表)。因此,没有看到 positionals
中留下的任何内容。
较新的版本放弃了此测试,代之以对 required
属性的测试(该属性已用于测试可选
)。
关于python - 如何在 argparse 中将子解析器设置为可选?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35570139/