您需要给
subparsers一个
dest。
parser = argparse.ArgumentParser()subparsers = parser.add_subparsers(dest='cmd')subparsers.required = True
现在:
1909:~/mypy$ argdev/python3 stack23349349.pyusage: stack23349349.py [-h] {foo} ...stack23349349.py: error: the following arguments are required: cmd为了发出此“缺少参数”错误消息,代码需要给该参数命名。对于位置自变量(如子表达式),该名称(默认情况下)为“目标”。在您链接的SO答案中有一个(次要)说明。
argparse在上一个Python版本中,为数不多的“补丁”之一改变了它测试“必需”参数的方式。不幸的是,它引入了有关次解析器的错误。此问题需要在下一个版本中解决(如果不能尽快)。
更新
如果您希望在Py2中具有此可选的子解析器行为,则最好的选择是使用两阶段解析器
相关的错误/问题中有一些近期活动
https://bugs.python.org/issue9253
更新
正在对此进行修复:https :
//github.com/python/cpython/pull/3027



