ArgParse Falsche Order der positionalen und optionalen Parameter
-
27-10-2019 - |
Frage
Warum wird Argparse diese Argumente nicht analysieren?
--foo 1 2 3 bar
Verwendung
parser = argparse.ArgumentParser()
parser.add_argument('--foo', nargs='+')
parser.add_argument('bar')
Was den folgenden Fehler gibt:
Fehler: Zu wenige Argumente
Wenn ich zuerst das Barargument bestehe, funktioniert es:
bar --foo 1 2 3
Nun ist dies an sich nicht schlecht. Ich kann mit den Positionsargumenten zuerst leben. Zuerst ist es nur so, dass dieses Verhalten nicht mit der Hilfe des Argars übereinstimmt, die für uns schafft, die besagt, dass die Bar zuletzt sein sollte:
Verwendung: argParSetest.py [-h] [--foo foo [foo ...]] Bar
Wie können Sie diese Arbeit mit konsequentem Hilfe -Text machen?
Hier ist eine vollständige Testprogramm.
Lösung
Versuchen Sie vielleicht, Flags aus dem Eingang zu machen und diese Optionen im add_argument auf fordered = true zu setzen?
http://docs.python.org/dev/library/argparse.html#the-add-argument-method
Andere Tipps
nargs='+'
fordert ArgParse an, alle verbleibenden Argumente zu sammeln, also bar
ist enthalten. Es hat keine magische Möglichkeit, zu erraten, dass Sie beabsichtigen bar
ein sinnvolles Argument für sich selbst sein und nicht Teil der Args genommen --foo
.
Das Beispiel in den Dokumenten bezieht sich auf eine einfache --foo
Argument, nicht eins mit nargs='+'
. Achten Sie darauf, den Unterschied zu verstehen.