【发布时间】:2021-11-13 02:06:41
【问题描述】:
使用python 3.9.5版本我遇到了以下代码sn-p的问题:
import argparse
parser = argparse.ArgumentParser()
subparsers = parser.add_subparsers(required=False)
sub_parser = subparsers.add_parser("sub")
parser.add_argument("global-argument")
args = parser.parse_args()
运行不带参数的 python 示例,会导致以下错误消息:
$ python3 main.py
usage: main.py [-h] {sub} ... global-argument
main.py: error: the following arguments are required: global-argument
错误信息显示只有全局参数是必需的,子命令是可选的。
但是使用 global 参数运行 python 示例,会导致以下错误消息:
$ python3 main.py global
usage: main.py [-h] {sub} ... global-argument
main.py: error: invalid choice: 'global' (choose from 'sub')
所以如果没有子命令(应该是可选的)就不可能提供全局参数?
【问题讨论】:
-
好发现!在我看来,这就像
argparse中的错误/设计决策。如果您说要为global-argument提供值sub,应该是什么逻辑-您如何告诉argparse它是全局位置参数而不是有效的子解析器命令名称?我希望他们支持--,但这也不起作用。最好在 Python 错误跟踪器中询问。如果需要,至少应该记录在案(不是)。 -
@blami,一般来说,主要的解析器参数都应该在创建
subparsers之前定义。您可以在之后添加optional,但不能添加另一个positional。有关详细信息,请参阅我的答案。 -
@hpaulj 谢谢!这很有用!
标签: python-3.x argparse