argparse是否提供了内置工具来让它将组或解析器解析到它们自己的命名空间中?我觉得我一定在某个地方错过了一个选择。
编辑:这个例子可能不完全是我应该做的结构解析器以满足我的目标,但它是我到目前为止的工作。我的具体目标是能够为子解析器提供解析为命名空间字段的选项组。我对父母的想法只是为了同样的目的使用通用选项。
例子:
import argparse
# Main parser
main_parser = argparse.ArgumentParser()
main_parser.add_argument("-common")
# filter parser
filter_parser = argparse.ArgumentParser(add_help=False)
filter_parser.add_argument("-filter1")
filter_parser.add_argument("-filter2")
# sub commands
subparsers = main_parser.add_subparsers(help='sub-command help')
parser_a = subparsers.add_parser('command_a', help="command_a help", parents=[filter_parser])
parser_a.add_argument("-foo")
parser_a.add_argument("-bar")
parser_b = subparsers.add_parser('command_b', help="command_b help", parents=[filter_parser])
parser_b.add_argument("-biz")
parser_b.add_argument("-baz")
# parse
namespace = main_parser.parse_args()
print namespace
这就是我得到的,显然:
$ python test.py command_a -foo bar -filter1 val
Namespace(bar=None, common=None, filter1='val', filter2=None, foo='bar')
但这是我真正追求的:
Namespace(bar=None, common=None, foo='bar',
filter=Namespace(filter1='val', filter2=None))
然后更多的选项组已经解析为命名空间:
Namespace(common=None,
foo='bar', bar=None,
filter=Namespace(filter1='val', filter2=None),
anotherGroup=Namespace(bazers='val'),
anotherGroup2=Namespace(fooers='val'),
)
我在这里找到了一个相关的问题,但它涉及一些自定义解析,并且似乎只涵盖了一个非常具体的情况。
是否有一个选项可以告诉 argparse 将某些组解析为命名空间字段?