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"- und
  "action"-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 von "ArgumentParser.add_argument()".

* Ersetze "(options, args) = parser.parse_args()" durch "args =
  parser.parse_args()" und füge für die positionellen Argumente
  weitere Aufrufe von "ArgumentParser.add_argument()" hinzu. Bedenke,
  dass das, was früher "options" hieß, im Kontext von "argparse" jetzt
  "args" heißt.

* Ersetze "optparse.OptionParser.disable_interspersed_args()", indem
  du "parse_intermixed_args()" anstelle von "parse_args()" verwendest.

* Ersetze Callback-Aktionen und die
  "callback_*"-Schlüsselwortargumente durch "type"- oder
  "action"-Argumente.

* Ersetze Zeichenkettennamen für "type"-Schlüsselwortargumente durch
  die entsprechenden Typobjekte (etwa int, float, complex usw.).

* Ersetze "optparse.Values" durch "Namespace" sowie
  "optparse.OptionError" und "optparse.OptionValueError" durch
  "ArgumentError".

* Ersetze Zeichenketten mit impliziten Argumenten wie "%default" oder
  "%prog" durch die übliche Python-Syntax, die Wörterbücher zur
  Formatierung von Zeichenketten nutzt, also "%(default)s" und
  "%(prog)s".

* Ersetze das "version"-Argument des OptionParser-Konstruktors durch
  einen Aufruf von "parser.add_argument('--version', action='version',
  version='<the version>')".
