Diese Antwort legt nahe optparse
was für ältere Python-Versionen geeignet ist. Für Python 2.7 und höher, argparse
Ersetzt optparse
. Siehe diese Antwort für weitere Informationen.
Wie bereits von anderen Leuten erwähnt, ist es besser, optparse statt getopt zu verwenden. getopt ist so ziemlich eine Eins-zu-Eins-Abbildung der Standardfunktionen der C-Bibliothek getopt(3) und nicht sehr einfach zu benutzen.
optparse ist zwar etwas ausführlicher, aber viel besser strukturiert und später einfacher zu erweitern.
Hier ist eine typische Zeile, um eine Option zu Ihrem Parser hinzuzufügen:
parser.add_option('-q', '--query',
action="store", dest="query",
help="query string", default="spam")
Es spricht so ziemlich für sich selbst; zur Verarbeitungszeit akzeptiert es -q oder --query als Optionen, speichert das Argument in einem Attribut namens query und hat einen Standardwert, wenn Sie es nicht angeben. Es ist auch selbstdokumentierend, da Sie das Argument help (das verwendet wird, wenn es mit -h/--help ausgeführt wird) direkt mit der Option deklarieren.
Normalerweise analysieren Sie Ihre Argumente mit:
options, args = parser.parse_args()
Dies analysiert standardmäßig die dem Skript übergebenen Standardargumente (sys.argv[1:])
options.query wird dann auf den Wert gesetzt, den Sie an das Skript übergeben haben.
Sie erstellen einen Parser einfach mit dem Befehl
parser = optparse.OptionParser()
Das sind alle Grundlagen, die Sie brauchen. Hier ist ein vollständiges Python-Skript, das dies zeigt:
import optparse
parser = optparse.OptionParser()
parser.add_option('-q', '--query',
action="store", dest="query",
help="query string", default="spam")
options, args = parser.parse_args()
print 'Query string:', options.query
5 Zeilen Python, die Ihnen die Grundlagen zeigen.
Speichern Sie es in sample.py, und führen Sie es einmal mit
python sample.py
und einmal mit
python sample.py --query myquery
Darüber hinaus werden Sie feststellen, dass optparse sehr einfach zu erweitern ist. In einem meiner Projekte habe ich eine Command-Klasse erstellt, mit der sich Unterbefehle in einem Befehlsbaum einfach verschachteln lassen. Sie nutzt optparse stark, um Befehle miteinander zu verketten. Das kann ich nicht in ein paar Zeilen erklären, aber Sie können es gerne tun in meinem Repository herumstöbern für die Hauptklasse, sowie eine Klasse, die sie verwendet, und den Optionsparser