如何在 argparse 中将子解析器设置为可选?
How can I set a subparser to be optional in argparse?
import argparse
parser_sub = subparsers.add_parser('files')
parser_sub.add_argument(
'--file-name',
action='store',
dest='filename',
nargs='*')
options = parser.parse_args()
输出:错误:参数太少。
根据这个 link:https://bugs.python.org/issue9253 它声明子解析器不能是可选的。可以更改此行为吗?
我希望我的子命令是可选的。如何通过 python 2.6 中的 argparse 实现此目的?
没有什么可以补充的了 bug/issue https://bugs.python.org/issue9253.
subparsers
是一种特殊的位置参数。通常使位置可选的唯一方法是使用 nargs='?'
参数。
如错误问题中所述,在最近的版本中,子解析器无意中变成了可选的。这是解析器检查所需参数的方式发生变化的结果。
我不会说不可能将此行为改进到 2.6 版本中,但这不是仅用一两个参数值就可以做到的事情。我认为这需要对此有很好的理解 bug/issue。它要么需要将代码更改为 parse_args
,要么可能需要自定义 subparser
操作 class.
在早期版本中,缺少的子解析器字符串将被捕获:
# 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
)。
import argparse
parser_sub = subparsers.add_parser('files')
parser_sub.add_argument(
'--file-name',
action='store',
dest='filename',
nargs='*')
options = parser.parse_args()
输出:错误:参数太少。
根据这个 link:https://bugs.python.org/issue9253 它声明子解析器不能是可选的。可以更改此行为吗?
我希望我的子命令是可选的。如何通过 python 2.6 中的 argparse 实现此目的?
没有什么可以补充的了 bug/issue https://bugs.python.org/issue9253.
subparsers
是一种特殊的位置参数。通常使位置可选的唯一方法是使用 nargs='?'
参数。
如错误问题中所述,在最近的版本中,子解析器无意中变成了可选的。这是解析器检查所需参数的方式发生变化的结果。
我不会说不可能将此行为改进到 2.6 版本中,但这不是仅用一两个参数值就可以做到的事情。我认为这需要对此有很好的理解 bug/issue。它要么需要将代码更改为 parse_args
,要么可能需要自定义 subparser
操作 class.
在早期版本中,缺少的子解析器字符串将被捕获:
# 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
)。