私はここで、そして一般的に、サブパーサーの例をたくさん検索してきましたが、この一見単純なことを理解できないようです。
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
はメインパーサー用に定義されているので、指定する必要がある前に残りの引数に使用されるサブパーサーを指定する引数。