Wie verwende ich argparse Subparser richtig?

Ich habe alle Subparser-Beispiele hier und im Allgemeinen durchgesehen, kann diese scheinbar einfache Sache aber nicht herausfinden.

Ich habe zwei var-Typen, von denen einer Einschränkungen unterliegt, daher dachte ich, Subparser sei der richtige Weg. z.B. -t erlaubt entweder "A" oder "B". Wenn der Benutzer "A" übergibt, muss er außerdem angeben, ob es sich um "a1" oder "a2" handelt. Wenn sie gerade "B" dann nichts führen.

Kann ich das tun und mir von argparse zurückgeben lassen, welcher Typ von "A" übergeben wurde oder ob es nur "B" war?

Das Folgende scheint zu funktionieren, bricht jedoch aus irgendeinem Grund ab, wenn nach dem Unterparsen etwas übergeben wird.

z.B. von einem Linux-Terminal

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

Fehler mit ...

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

Hoffentlich macht das Sinn.

Der Code:

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

Antworten auf die Frage(1)

Ihre Antwort auf die Frage