我想使用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()
答案 0 :(得分:0)
你在这看到一种模式吗?
subparsers = parser.add_subparsers(help='sub-command help')
...
parser_payload = subparsers.add_parser( # ok
...
parser_payload.add_parser( # error
parser
有add_subparsers
方法。 subparsers
对象(无论如何)都有add_parser
方法。错误消息表明parser
没有该方法。
如果要将子分析符添加到parser_payload
,则必须从add_subparsers
方法开始。
argparse
是围绕类组织的,无论是否从文档中都可以看出。每个类都有其定义的方法。
我喜欢在交互式环境中开发,在这种环境中,我可以在创建get时检查对象的类和属性。