argparse サブパーサーを正しく使用するにはどうすればいいですか? 質問する

argparse サブパーサーを正しく使用するにはどうすればいいですか? 質問する

私はここで、そして一般的に、サブパーサーの例をたくさん検索してきましたが、この一見単純なことを理解できないようです。

2 つの var タイプがあり、そのうちの 1 つには制約があるため、サブパーサーを使用するのが適切だと考えました。たとえば、-t は「A」または「B」のいずれかを許可します。ユーザーが「A」を渡す場合、さらに「a1」または「a2」のどちらであるかも指定する必要があります。「B」だけを渡した場合は何も行われません。

これを実行して、argparse に渡された「A」のタイプ、または「B」だけを返すようにできますか?

以下は動作するように見えますが、何らかの理由でサブパースの後に何かを渡すと動作が停止します。

例えばLinuxターミナルから

>> python test01.py -t A a1 -v 61

...に関するエラー

usage: test01.py a1 [-h]
test01.py a1: error: unrecognized arguments: -v

それが意味を成すといいのですが。

コード:

import argparse

parser = argparse.ArgumentParser()
subparsers = parser.add_subparsers(help='types of A')

parser.add_argument("-t",
                    choices = ["A", "B"],
                    dest = "type",
                    required=True,
                    action='store',
                    help="Some help blah blah")

cam_parser = subparsers.add_parser('a1', help='Default')
cam_parser.set_defaults(which='a1')

cam_parser = subparsers.add_parser('a2', help='parse this instead of default')
cam_parser.set_defaults(which='a2')


parser.add_argument("-v",
                    nargs = '+',
                    required=True,
                    dest = "version",
                    type=int,
                    action='store',
                    help="some version help blah blah")   

argument = parser.parse_args()

print argument.type
print argument.version

ベストアンサー1

サブパーサーは最初の値に基づいて呼び出されます位置的引数なので、呼び出しは次のようになります

python test01.py A a1 -v 61

「A」は、位置引数とオプションを許可するように定義される適切なサブパーサーをトリガーします-v

argparse引数やオプションの出現順序に特に制限はなく、引数やオプションを変更する簡単な方法もありません。5月解析が開始されると表示される場合 (パーサー インスタンスを変更するカスタム アクションが関係するものが機能する可能性があります)、-tそれ自体を置き換えることを検討する必要があります。

import argparse

parser = argparse.ArgumentParser()
subparsers = parser.add_subparsers(help='types of A')
parser.add_argument("-v", ...)

a_parser = subparsers.add_parser("A")
b_parser = subparsers.add_parser("B")

a_parser.add_argument("something", choices=['a1', 'a2'])

-vはメインパーサー用に定義されているので、指定する必要がある前に残りの引数に使用されるサブパーサーを指定する引数。

おすすめ記事