Python 如何在argparse中添加带有子parser的可选位置参数?
我正在尝试使用argparse模块向多个子parser添加一个必需的输入文件名和一个可选的输出文件名 以下是我的尝试:Python 如何在argparse中添加带有子parser的可选位置参数?,python,python-2.7,argparse,Python,Python 2.7,Argparse,我正在尝试使用argparse模块向多个子parser添加一个必需的输入文件名和一个可选的输出文件名 以下是我的尝试: # test_argparse.py import argparse def setup_parser(): parser = argparse.ArgumentParser(prog='test_argparse.py', formatter_class=argparse.RawDescriptionHel
# test_argparse.py
import argparse
def setup_parser():
parser = argparse.ArgumentParser(prog='test_argparse.py',
formatter_class=argparse.RawDescriptionHelpFormatter,
description='Testing the argparse module.')
parser.add_argument('--version', action='version', version='%(prog)s 1.0')
subparsers = parser.add_subparsers()
parser_actionA = subparsers.add_parser('actionA')
parser_actionB = subparsers.add_parser('actionB')
parser_actionC = subparsers.add_parser('actionC')
parser.add_argument('infile', nargs=1, help='input mesh file name')
parser.add_argument('outfile', nargs='?', help='output mesh file name')
return parser
if __name__ == '__main__':
parser = setup_parser()
args = parser.parse_args()
print args
如果我执行此命令:
python test_argparse.py actionA infile outfile
它不起作用,我得到的是:
usage: test_argparse.py [-h] [--version]
{actionA,actionB,actionC} ... infile [outfile]
test_argparse.py: error: unrecognized arguments: infile
使用公共参数定义新的解析器,并将其传递给子解析器,如下所示:
这个问题的可能重复可能与以下结论更相关:这种行为可能是argparse中的一个bug,也可能是它在封面下使用的贪婪模式匹配的一个特性。
parser
在您的示例中正确吗?如果我像您一样定义文件
,则解析器
“未定义”。它应该是文件吗?@harperville:是的,它是正确的。这段代码扩展了OP的代码,其中定义了parser
。add\u help
指令是让我继续努力工作的关键。谢谢你的回答。
files = argparse.ArgumentParser(add_help=False)
files.add_argument('infile', nargs=1, help='input mesh file name')
files.add_argument('outfile', nargs='?', help='output mesh file name')
subparsers = parser.add_subparsers()
parser_actionA = subparsers.add_parser('actionA', parents=[files])
parser_actionB = subparsers.add_parser('actionB', parents=[files])
etc..