Migrieren von optparse-Code zu argparse¶
Das Modul argparse bietet mehrere High-Level-Funktionen, die das Modul optparse nicht nativ bereitstellt, darunter
Behandlung von Positionsargumenten.
Unterstützung von Unterbefehlen.
Zulassen alternativer Optionspräfixe wie
+und/.Behandlung von Argumenten im Stil Null-oder-mehr und Eins-oder-mehr.
Erzeugung informativerer Nutzungsnachrichten.
Bereitstellung einer wesentlich einfacheren Schnittstelle für benutzerdefinierte
typeundaction.
Ursprünglich versuchte das Modul argparse, die Kompatibilität mit optparse aufrechtzuerhalten. Aufgrund der grundlegenden Designunterschiede zwischen der Unterstützung der deklarativen Verarbeitung von Kommandozeilenoptionen (während die Verarbeitung von Positionsargumenten der Anwendung überlassen wird) und der Unterstützung von sowohl benannten Optionen als auch Positionsargumenten in der deklarativen Schnittstelle ist die API im Laufe der Zeit von der von optparse abgewichen.
Wie in Auswahl einer Argumenten-Parser-Bibliothek beschrieben, können Anwendungen, die derzeit optparse verwenden und mit dessen Funktionsweise zufrieden sind, optparse einfach weiter verwenden.
Anwendungsentwickler, die eine Migration in Erwägung ziehen, sollten auch die Liste der intrinsischen Verhaltensunterschiede in diesem Abschnitt überprüfen, bevor sie entscheiden, ob eine Migration wünschenswert ist.
Für Anwendungen, die sich für die Migration von optparse zu argparse entscheiden, sollten die folgenden Vorschläge hilfreich sein
Ersetzen Sie alle Aufrufe von
optparse.OptionParser.add_option()durch Aufrufe vonArgumentParser.add_argument().Ersetzen Sie
(options, args) = parser.parse_args()durchargs = parser.parse_args()und fügen Sie zusätzlicheArgumentParser.add_argument()Aufrufe für die Positionsargumente hinzu. Beachten Sie, dass das, was bisher alsoptionsbezeichnet wurde, nun im Kontext vonargparsealsargsbezeichnet wird.Ersetzen Sie
optparse.OptionParser.disable_interspersed_args()durch die Verwendung vonparse_intermixed_args()anstelle vonparse_args().Ersetzen Sie Callback-Aktionen und die Schlüsselwortargumente
callback_*durch die Argumentetypeoderaction.Ersetzen Sie Zeichenkettennamen für Schlüsselwortargumente
typedurch die entsprechenden Typobjekte (z. B. int, float, complex usw.).Ersetzen Sie
optparse.ValuesdurchNamespaceundoptparse.OptionErrorsowieoptparse.OptionValueErrordurchArgumentError.Ersetzen Sie Zeichenketten mit impliziten Argumenten wie
%defaultoder%progdurch die Standard-Python-Syntax zur Formatierung von Zeichenketten mit Wörterbüchern, d. h.%(default)sund%(prog)s.Ersetzen Sie das Argument
versiondes Konstruktors OptionParser durch einen Aufruf vonparser.add_argument('--version', action='version', version='<die Version>').