【问题标题】:How do I add optional positional arguments with subparsers in argparse?如何在 argparse 中添加带有子解析器的可选位置参数?
【发布时间】:2012-06-21 21:40:30
【问题描述】:

我正在尝试使用 argparse 模块将必需的输入文件名和可选的输出文件名添加到多个子解析器。

这是我的尝试:

# 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

【问题讨论】:

标签: python python-2.7 argparse


【解决方案1】:

定义一个具有公共参数的新解析器并将其作为parents 传递给子解析器:

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..

【讨论】:

  • parser 在您的示例中是否正确?如果我像您一样定义files,那么parser“未定义”。应该改为files 吗?
  • @harperville:是的,没错。这个 sn-p 扩展了 OP 的代码,其中定义了 parser
  • add_help 指令是让我继续寻求使其发挥作用的关键。感谢您的回答。
猜你喜欢
  • 2021-01-10
  • 1970-01-01
  • 2020-11-10
  • 2020-09-26
  • 1970-01-01
  • 2017-02-23
  • 2013-10-09
  • 1970-01-01
  • 2018-09-17
相关资源
最近更新 更多