Предоставляет ли 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 для анализа определенных групп в полях пространства имен?