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它指出subparsers不能是可选的。这种行为可以改变吗?
我希望我的子命令是可选的。我如何通过python 2.6中的argparse实现这一点?
答案 0 :(得分:2)
没有太多可以添加到该错误/问题https://bugs.python.org/issue9253。
subparsers
是一种特殊的位置论证。通常,使位置可选的唯一方法是使用nargs='?'
参数。
在错误问题中详细说明,在最近的版本中,subparsers无意中被设为可选。这是解析器检查所需参数的方式发生变化的结果。
我不会说将这种行为改进到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
属性(已用于测试optionals
)的测试。