Wie füge ich meinen Befehlszeilenargumenten ein optionales Flag hinzu?
z.B. damit ich schreiben kann
python myprog.py
oder
python myprog.py -w
Ich habe es versucht
parser.add_argument('-w')
Aber ich bekomme nur eine Fehlermeldung
Usage [-w W]
error: argument -w: expected one argument
was ich nehme, bedeutet, dass es einen Argumentwert für die Option -w will. Wie kann man nur eine Flagge akzeptieren?
Ich finde http://docs.python.org/library/argparse.html in dieser Frage ziemlich undurchsichtig.
python
command-line-arguments
argparse
Interstar
quelle
quelle
Antworten:
Wie Sie es haben, erwartet das Argument w einen Wert nach -w in der Befehlszeile. Wenn Sie gerade suchen , um einen Schalter zu drehen durch eine variable Einstellung
True
oderFalse
haben einen Blick auf http://docs.python.org/dev/library/argparse.html#action (speziell store_true und store_false)wo
action='store_true'
impliziertdefault=False
.Umgekehrt könnten Sie haben
action='store_false'
, was impliziertdefault=True
.quelle
w
ist immerFalse
.Hinzufügen eines schnellen Snippets, damit es ausgeführt werden kann:
Quelle: myparser.py
Verwendungszweck:
quelle
Hier ist ein schneller Weg, es wird nichts anderes benötigt
sys
.. obwohl die Funktionalität eingeschränkt ist:flag = "--flag" in sys.argv[1:]
[1:]
ist für den Fall, dass der vollständige Dateiname ist--flag
quelle
--flag
unerwartet verhält, und was noch schlimmer ist, dass dies später häufig eine Sicherheitslücke darstellt, wenn nicht vertrauenswürdige Daten vorliegen an argv übergeben. Am Ende sollte diese Methode einfach nicht durchgeführt werden. Echte Arg-Parser sind einfach viel robuster ...