首页 > 解决方案 > 子解析器的位置参数引发错误:无效选择

问题描述

我是新手,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>

我将不胜感激任何反馈。谢谢!

标签: pythonparsingcommand-line-argumentsargparse

解决方案


感谢@PhilippSelenium 指出文档的链接。

我通过删除解决了这个parents=[parent_parser]问题subparsers.add_parser()


推荐阅读