如何在argparse中将subparser设置为可选?

时间:2016-02-23 06:11:05

标签: python python-3.x argparse python-2.6

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实现这一点?

1 个答案:

答案 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)的测试。