2012-10-24 7 views
5

Ich versuche, ein Programm zu erstellen, das von der Befehlszeile aufgerufen werden kann und Schlüsselwortargumente in Python 2.6 verwendet. Bisher habe ich versucht:kwargs in ausführbaren Python-Dateien

#!/usr/bin/python 
def read(foo = 5): 
    print foo 
    return 0 
if __name__ == '__main__' 
    read() 

Wenn ich versuche, das von der Kommandozeile ausgeführt werden: ./test.py das Programm druckt 5 wie erwartet. Gibt es eine Möglichkeit, zu verwenden? Ich möchte die Schlüsselwortargumente erhalten.

Es scheint wie eine einfache Frage, aber ich habe keine gute Quelle dafür gefunden.

+2

Werfen Sie einen Blick auf das Modul "argparse" (http://docs.python.org/dev/library/argparse.html), das nur für diesen Zweck gedacht ist. –

Antwort

6

Python verfügt über eine integrierte Bibliothek, mit der Sie Befehlszeilenargumente an ein Skript übergeben können argparse. Die Nutzung ist ein wenig anders dann, was Sie aber in Ihrer Frage beschreiben ...

Auf einer grundlegenden Ebene Sie alle Befehlszeilenargumente von sys.argv zugreifen können, die eine Liste von Argumenten wird

Leider haben sollte erwähnt die Python 2.6-Bibliothek heißt optparse

+0

Danke für den schnellen Kommentar. Unglücklicherweise benutze ich Python 2.6, also ist 'argparse' unavailbale und ich habe nicht herausgefunden, wie' sys.argv' mit Schlüsselwortargumenten verwendet werden kann, aber ich spiele immer noch damit. – greatscott

+1

@Greatscott: Es gibt 'getopt' in Python2.6, was in Ihrem Fall tun sollte. – SilentGhost

+1

2.6 hat optparse auch –

3

So etwas wie das?

if __name__ == '__main__': 
    kwargs = dict(x.split('=', 1) for x in sys.argv[1:]) 
    read(**kwargs) 

Das heißt, argparse und optparse werden Sie wahrscheinlich etwas robuster und natürlicher zu der Kommandozeile benutzt, um jemanden zu geben. (Ganz zu schweigen, unterstützende Argumente von anderen Typen als String.)

Oh, und wenn du bist wirklich nach ist nur interaktive Nutzung Ihrer Funktion, verwenden Sie den interaktiven Interpreter; entweder python oder ipython. Sie müssten den Code in eine Datei mit der Endung .py einfügen und importieren, dann könnten Sie ihn einfach anrufen.

+0

Danke. Ich schreibe dies eigentlich für einen Mitarbeiter, der alles von der Befehlszeile aus ausführen möchte, anstatt "python" oder "ipython" zu verwenden. Ich schätze die Hilfe jedoch. Ich werde "optparse" auschecken. – greatscott

1

Eine weniger übliche, aber sehr interessante Alternative ist docopt: Eine Bibliothek, die einen Argumentparser aus der Hilfemeldung erzeugt, die Sie für Ihr Programm schreiben (on github).