【发布时间】:2021-08-02 15:43:13
【问题描述】:
我是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> 的子解析器?
如有任何反馈,我将不胜感激。谢谢!
【问题讨论】:
标签: python parsing command-line-arguments argparse