Ich habe festgestellt, dass die Python 2.7-Dokumentation ein weiteres Befehlszeilen-Parsing-Modul enthält. Neben getopt
und haben optparse
wir jetzt argparse
.
Warum wurde ein weiteres Befehlszeilen-Parsing-Modul erstellt? Warum sollte ich es anstelle von verwenden optparse
? Gibt es neue Funktionen, die ich kennen sollte?
Antworten:
Ab Python
2.7
,optparse
ist veraltet und wird in Zukunft hoffentlich weg.argparse
ist aus allen auf der Originalseite aufgeführten Gründen besser ( https://code.google.com/archive/p/argparse/ ):+
und/
Weitere Informationen finden Sie auch in PEP 389 , dem Fahrzeug, mit dem
argparse
es in die Standardbibliothek gelangt ist.quelle
optparse
in der PEP führt später zu Argumenten darüber, wie komplex das Hinzufügen ist, damit es so klingt, als wäre es so flexibel wie Rock (schlecht).@ Nicholas 'Antwort deckt dies gut ab, denke ich, aber nicht die "Meta" -Frage, mit der Sie beginnen:
Das ist das Dilemma Nummer eins, wenn ein nützliches Modul zur Standardbibliothek hinzugefügt wird: Was tun Sie, wenn sich eine wesentlich bessere, aber abwärtskompatible Möglichkeit ergibt, dieselbe Art von Funktionalität bereitzustellen?
Entweder bleiben Sie bei der alten und zugegebenermaßen übertroffenen Methode (normalerweise, wenn es sich um komplizierte Pakete handelt: Asyncore vs Twisted, Tkinter vs WX oder Qt, ...) oder Sie haben mehrere inkompatible Möglichkeiten, dasselbe zu tun (XML) Parser, IMHO, sind ein noch besseres Beispiel dafür als Kommandozeilen-Parser - aber das
email
Paket im Vergleich zu den unzähligen alten Methoden, mit ähnlichen Problemen umzugehen, ist auch nicht allzu weit entfernt ;-).Sie können in den Dokumenten bedrohlich darüber meckern, dass die alten Methoden "veraltet" sind, aber (solange Sie die Abwärtskompatibilität beibehalten müssen), können Sie sie nicht wirklich entfernen, ohne große, wichtige Anwendungen daran zu hindern, auf neuere Python-Versionen umzusteigen.
(Das Dilemma Nummer zwei, das nicht direkt mit Ihrer Frage zusammenhängt, ist in dem alten Sprichwort zusammengefasst: "In der Standardbibliothek sterben gute Pakete" ... mit Veröffentlichungen alle anderthalb Jahre oder so, Pakete, die nicht sehr sind, Sehr stabil, da sie nicht öfter veröffentlicht werden müssen, kann tatsächlich erheblich darunter leiden, dass sie in der Standardbibliothek "eingefroren" werden ... aber das ist wirklich ein anderes Problem.
quelle
parser.add_argument('--long-opt', '-l',...)
; '-' ist einfach zu handhaben und wie Sie möchten.Die beste Quelle für eine Python-Ergänzung wäre das PEP: PEP 389: argparse - Neues Befehlszeilen-Parsing-Modul , insbesondere der Abschnitt mit dem Titel " Warum sind getopt und optparse nicht genug?"
quelle
Es gibt auch neue Kinder auf dem Block!
Wenn Sie einen ausführlicheren Vergleich benötigen, lesen Sie diesen bitte und Sie können docopt verwenden oder klicken . Vielen Dank an Kyle Purdon!
quelle
Anfangs war ich genauso zurückhaltend wie @fmark, von optparse zu argparse zu wechseln, weil:
Dann habe ich dieses Dokument gesehen, in dem argparse optparse übertrifft, insbesondere wenn es darum geht, eine aussagekräftige Hilfemeldung zu generieren: http://argparse.googlecode.com/svn/trunk/doc/argparse-vs-optparse.html
Und dann sah ich " argparse vs. optparse " von @Nicholas und sagte, wir könnten Argparse in Python <2.7 verfügbar haben (Ja, das wusste ich vorher nicht.)
Jetzt sind meine beiden Bedenken gut angesprochen. Ich habe dies in der Hoffnung geschrieben, dass es anderen mit einer ähnlichen Einstellung helfen wird.
quelle