python - 子解析器的位置参数引发错误:无效选择
问题描述
我是新手,argsparse
因此这很可能是新手的错误,所以请与我裸露。我的代码:
import argsparse
parent_parser = argparse.ArgumentParser(description='Argument Parser')
subparsers = parent_parser.add_subparsers(title="Sub-commands", description='Sub-commands Parser')
parser_create = subparsers.add_parser('run', parents=[parent_parser], add_help=False, help="run the program")
parser_create.add_argument('--program', metavar=('NAME'), required=True, type=str, help='name of the program')
parser.py run --program 'test'
这在控制台中运行时效果很好:
args = parent_parser.parse_args(); print(args)
输出Namespace(program='test')
但是,当我尝试将可选参数替换为位置参数时,例如:
parser_create.add_argument('program', metavar=('NAME'), type=str, help='name of the program')
然后parser.py run 'test'
在控制台中运行会引发以下错误:
usage: parser.py run [-h] {run} ... NAME
parser.py run: error: invalid choice: 'test' (choose from 'run')
将位置参数添加到组会导致与上述相同的错误:
required = parser_create.add_argument_group('required positional argument')
required.add_argument('program', metavar=('NAME'), type=str, help='name of the program')
如何将位置参数传递给格式化为的子解析器run <program>
?
我将不胜感激任何反馈。谢谢!
解决方案
感谢@PhilippSelenium 指出文档的链接。
我通过删除解决了这个parents=[parent_parser]
问题subparsers.add_parser()
推荐阅读
- bash - 使用 bash & jq 将 github 提交/名称导出到 CSV
- java - 我潜在的 groovy 依赖问题是什么,intellij?
- visual-studio-code - 如何调查占用 30% CPU 的 VS Code,尽管它应该什么都不做
- xcode - Xcode 没有在 @rpath 中搜索 dylib?
- java - 调用静态方法时强制转换为 lambda 表达式,将其作为函数接口作为参数传递,并改用方法引用
- javascript - VueJS - 使用发射自动绑定子组件中的父对象,为什么?
- sql - ORACLE Why alias COUNTER is an invalid ID in my case counter > 0?
- python - 将 2 个 dict 列表合并到一个 dict 列表中
- javascript - React Redux - 尝试使用 React-DnD 和 mapDispatchToProps 时遇到问题
- android - 使用光刻的 2D 可滚动列表/平移功能?