podkomendy argparse z zagnieżdżonymi przestrzeniami nazw

Robiargparse zapewnić wbudowane funkcje do analizowania grup lub analizatorów składni w ich własnych przestrzeniach nazw? Czuję, że muszę gdzieś brakować opcji.

Edytować: Ten przykład prawdopodobnie nie jest dokładnie tym, co powinienem robić, aby skonstruować parser, aby spełnić mój cel, ale to właśnie wypracowałem do tej pory. Moim konkretnym celem jest umożliwienie nadawania grupom opcji, które są analizowane w polach przestrzeni nazw. Pomysł, jaki miałem z rodzicem, polegał po prostu na użyciu wspólnych opcji do tego samego celu.

Przykład:

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

Oto co otrzymuję:

$ python test.py command_a -foo bar -filter1 val
Namespace(bar=None, common=None, filter1='val', filter2=None, foo='bar')

Ale po to naprawdę jestem:

Namespace(bar=None, common=None, foo='bar', 
          filter=Namespace(filter1='val', filter2=None))

A potem jeszcze więcej grup opcji jest już analizowanych w przestrzeniach nazw:

Namespace(common=None, 
          foo='bar', bar=None,  
          filter=Namespace(filter1='val', filter2=None),
          anotherGroup=Namespace(bazers='val'),
          anotherGroup2=Namespace(fooers='val'),
          )

Znalazłempowiązane pytanie tutaj ale wiąże się z pewną niestandardową analizą i wydaje się, że obejmuje tylko konkretną sytuację.

Czy jest gdzieś opcja, aby powiedzieć argparse, aby przeanalizował pewne grupy w pola nazwane?

questionAnswers(6)

yourAnswerToTheQuestion