2016-11-30 5 views
0

Wie füge ich ein optionales Argument, das einen Standardwert hat und mit einem anderen Wert aufgerufen werden kann oder der ohne Wert aufgerufen werden kann (und den Standard hat). Also habe ich dieses ArgumentPython argparse optionale Argumente ohne Argument (nicht speichern true)

parser.add_argument("-a", "--automatic", type=int, default=8) 

und ich möchte anrufen können. wenn ich einen automatischen Modus mit 8 als Argument wollen, aber ich möchte auch zum Beispiel My_script.py -a 10 tun, wenn ich einen automatischen Modus mit 10 (oder einer anderen Zahl) als Argument wollen. Das Problem ist, dass ich ein Argument erwartet, wenn ich mit laufen. Wenn ich die 8 nicht angeben möchte, darf ich auch nicht das -a angeben und dann muss ich My_script.py ausführen, was ich nicht will.

+0

Wenn das Übergeben von nichts äquivalent zum Übergeben von "-a" ohne einen Wert ist, warum lässt letzteres zu? Es macht es einfach, Fehler/Mehrdeutigkeiten beim Parsen zu machen. 'nargs = '?" "Art von Arbeiten (Sie müssen" None "manuell durch" 8 "ersetzen, wenn es passiert, denn wenn es ohne ein Argument angegeben wird, ist es nicht der Standardfall, also speichert es' None'), aber es ist eine schlechte Idee. – ShadowRanger

+0

Das scheint mehrdeutig. Wie soll der Parser sagen, ob die Sache nach '-a' ein Wert für die Option '-a' oder ein Positionsargument ist? Ob argparse das unterstützt oder nicht, ich glaube nicht, dass dies eine gute Schnittstelle ist. – user2357112

+0

Spielen Sie mit 'nargs = '?'' Und geben Sie 'default' und' const' Parameter. – hpaulj

Antwort

0

Fügen Sie nargs='?' und const=8 hinzu. Von the documentation:

:

ArgumentParser-Objekte verknüpfen normalerweise ein einzelnes Befehlszeilenargument mit einer einzigen auszuführenden Aktion. Das Schlüsselwort argument nargs ordnet einer einzelnen Aktion eine andere Anzahl von Befehlszeilenargumenten zu.

...

'?'. Ein Argument wird, wenn möglich, von der Befehlszeile verbraucht und als einzelnes Element erzeugt. Wenn kein Befehlszeilenargument vorhanden ist, wird der Wert default erzeugt. Beachten Sie, dass es für optionale Argumente einen zusätzlichen Fall gibt - die Optionszeichenfolge ist vorhanden, aber nicht gefolgt von einem Befehlszeilenargument. In diesem Fall wird der Wert const erzeugt.

+1

Das ist nicht genug, Sie "const" muss auch übergeben werden, wie @hpaulj feststellt, oder wenn der Schalter ohne Wert übergeben wird, wird "None" und nicht der "default" -Wert gespeichert. – ShadowRanger

+0

Richtig bist du, @ShadowRanger. Ich habe meine Antwort aktualisiert. Danke dir und hpaulj für die Korrektur. – Chris

Verwandte Themen