Argparse嵌套的subparsers

时间:2017-07-28 19:44:44

标签: python-3.x parsing command-line-arguments argparse

我想使用python 3库subparsers创建嵌套的argparse。目前,我在尝试实施解决方案时收到此错误消息:

AttributeError: 'ArgumentParser' object has no attribute 'add_parser'

以下是我正在使用的代码:

def parse_args():
    """
    Parse and validate user command line.
    """
    # Top-level parser
    parser = argparse.ArgumentParser(
        description="foo"
    )

    parser.add_argument(
        "-foo",
        dest="foo",
        help="foo",
        required=True,
        type=str
    )

    subparsers = parser.add_subparsers(help='sub-command help')

    # Parser for the "payload" command
    parser_payload = subparsers.add_parser(
        "payload", 
        help="payload help"
    )

    parser_payload.add_argument(
        "-b",
        "--bar",
        dest="bar",
        help="bar",
        type=str
    )

    # Parser for the "payload->foobar" command
    parser_payload_foobar = parser_payload.add_parser(
        "foobar"
        help="foobar help"
    )

    parser_payload_foobar.add_argument(
        "-bf",
        "--barfoo",
        dest="barfoo",
        help="barfoo",
        type=str
    )

    return parser.parse_args()

1 个答案:

答案 0 :(得分:0)

你在这看到一种模式吗?

subparsers = parser.add_subparsers(help='sub-command help')
...
parser_payload = subparsers.add_parser(   # ok
...
parser_payload.add_parser(    # error

parseradd_subparsers方法。 subparsers对象(无论如何)都有add_parser方法。错误消息表明parser没有该方法。

如果要将子分析符添加到parser_payload,则必须从add_subparsers方法开始。

argparse是围绕类组织的,无论是否从文档中都可以看出。每个类都有其定义的方法。

我喜欢在交互式环境中开发,在这种环境中,我可以在创建get时检查对象的类和属性。