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 に指示するオプションはどこかにありますか?