Ich habe durch allot die Subparser-Beispiele hier und im Allgemeinen gesucht, aber ich kann nicht scheinen, diese scheinbar einfache Sache herauszufinden.Wie verwende ich argparse subparsers richtig?
Ich habe zwei Var-Typen, von denen einer Einschränkungen hat, so dachte, subparser war der Weg zu gehen. z.B. -t erlaubt entweder "A" oder "B". Wenn der Benutzer "A" übergibt, muss er außerdem angeben, ob er entweder "a1" oder "a2" ist. Wenn sie nur "B" passieren, dann nichts.
Kann ich das tun und argparse zurückgeben, welche Art von "A" wurde bestanden oder wenn es nur "B" war?
Das unten scheint zu funktionieren, aber aus irgendeinem Grund bricht, wenn etwas nach der Subparse übergeben.
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, die Sinn macht.
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
großen vielen Dank. Allerdings bekam ich immer noch einen Fehler, wenn ich -v aus irgendeinem Grund passierte, d. H. Es wurde -v erwartet und als ich es übergeben habe, bekam ich meinen alten Fehler "unerkannte Argumente". Auch wenn ich es vor den Positionsargumenten übergeben habe. Irgendwelche Ideen? Ich habe versucht, ein ähnliches Beispiel zu finden, aber ich hatte nicht viel Glück. – user1571144
ist 'vor dem Argument, das angibt, welcher Subparser 'sich auf den Code des Benutzers bezieht, der das Argument oder beides eingibt? – Nickpick
Es erscheint die Ausführung von 'group1 = parser.add_subparsers (help = 'subparser group 1')' und 'group2 = parser.add_subparsers (help = 'subparser group 2')' gibt 'error: kann nicht mehrere subparser arguments' Fehler haben. Ich hatte gehofft, damit Unterbefehle zu gruppieren. –