Ich habe folgende Schnipsel, wo ich verwende argparse mit mehreren subparsersPython argparse, Positionsargumente und subparsers
parser = argparse.ArgumentParser(description = "Setup the DB",
add_help=False)
parser.add_argument('action', type = str,
choices=['drop','populate','print','create','print-metadata'],
help = "Specify an action", default = None)
subparsers = parser.add_subparsers()
drop_parser = subparsers.add_parser('drop',parents=[parser])
drop_parser.add_argument('-dataset-name',
required=True,
type = str, help = "Dataset Name",
default = None)
.....
args = parser.parse_args()
.....
Wenn ich dies laufen ich folgendes erhalten:
python .\populatedb.py drop -dataset-name foo
populatedb.py: error: invalid choice: 'foo' (choose from 'drop', 'populate', 'print', 'create', 'print-metadata')
Ich bin frage mich, wo der Code oben falsch läuft. Beachten Sie, dass das Argument "Aktion" ein Positionsargument ist.
Vielen Dank im Voraus. Dies ist meine erste Verwendung von Subparsern. Ich mache wahrscheinlich einen offensichtlichen Fehler.
Vielen Dank im Voraus.
Grüße,
Ranga
Warum fügen Sie ein Argument für den Subparser hinzu? – mgilson
Danke für die schnelle Antwort. Das Argument ist nur für die Aktion "drop" sinnvoll. Für andere Optionen ist es nicht sinnvoll, daher habe ich es dem Subparser hinzugefügt. Ich habe die anderen Subparser aus Gründen der Klarheit weggelassen. – LostInTheFrequencyDomain
Es fühlt sich so an, als müssten Sie 'Action Drop' hinzufügen. Sie können python popledb.py -h ausführen, um die Abfolge der Argumente zu sehen, die Sie übergeben müssen. –