Migration von optparse-Code zu argparse¶
Das Modul argparse bietet mehrere höhere Funktionen, die das Modul optparse von sich aus nicht bereitstellt, darunter:
Umgang mit positionellen Argumenten.
Unterstützung von Unterbefehlen.
Alternative Optionspräfixe wie
+und/.Umgang mit Argumenten der Art „null oder mehr“ und „eins oder mehr“.
Aussagekräftigere Verwendungshinweise.
Eine deutlich einfachere Schnittstelle für eigene
type- undaction-Angaben.
Ursprünglich versuchte das Modul argparse, die Kompatibilität mit optparse zu erhalten. Die grundlegenden Entwurfsunterschiede zwischen einer deklarativen Verarbeitung von Befehlszeilenoptionen (die die Verarbeitung positioneller Argumente dem Anwendungscode überlässt) und der Unterstützung sowohl benannter Optionen als auch positioneller Argumente in der deklarativen Schnittstelle führen jedoch dazu, dass sich die API im Laufe der Zeit von der von optparse entfernt hat.
Wie unter Choosing an argument parsing library beschrieben, können Anwendungen, die derzeit optparse verwenden und mit dessen Arbeitsweise zufrieden sind, einfach weiter optparse nutzen.
Anwendungsentwickler, die eine Migration erwägen, sollten vor der Entscheidung, ob eine Migration wünschenswert ist, außerdem die Liste der grundlegenden Verhaltensunterschiede durchgehen, die in diesem Abschnitt beschrieben sind.
Für Anwendungen, die sich für die Migration von optparse nach argparse entscheiden, dürften die folgenden Vorschläge hilfreich sein:
Ersetze alle Aufrufe von
optparse.OptionParser.add_option()durch Aufrufe vonArgumentParser.add_argument().Ersetze
(options, args) = parser.parse_args()durchargs = parser.parse_args()und füge für die positionellen Argumente weitere Aufrufe vonArgumentParser.add_argument()hinzu. Bedenke, dass das, was früheroptionshieß, im Kontext vonargparsejetztargsheißt.Ersetze
optparse.OptionParser.disable_interspersed_args(), indem duparse_intermixed_args()anstelle vonparse_args()verwendest.Ersetze Callback-Aktionen und die
callback_*-Schlüsselwortargumente durchtype- oderaction-Argumente.Ersetze Zeichenkettennamen für
type-Schlüsselwortargumente durch die entsprechenden Typobjekte (etwa int, float, complex usw.).Ersetze
optparse.ValuesdurchNamespacesowieoptparse.OptionErrorundoptparse.OptionValueErrordurchArgumentError.Ersetze Zeichenketten mit impliziten Argumenten wie
%defaultoder%progdurch die übliche Python-Syntax, die Wörterbücher zur Formatierung von Zeichenketten nutzt, also%(default)sund%(prog)s.Ersetze das
version-Argument des OptionParser-Konstruktors durch einen Aufruf vonparser.add_argument('--version', action='version', version='<the version>').