581 Stimmen

Funktion über die Befehlszeile ausführen

Ich habe diesen Code:

def hello():
    return 'Hi :)'

Wie kann ich dies direkt von der Befehlszeile aus ausführen?

861voto

Frédéric Hamidi Punkte 249635

Mit dem -c (Befehl) Argument (vorausgesetzt, Ihre Datei heißt foo.py ):

$ python -c 'import foo; print foo.hello()'

Alternativ, wenn Sie sich nicht um die Verschmutzung von Namensräumen kümmern:

$ python -c 'from foo import *; print hello()'

Und der Mittelweg:

$ python -c 'from foo import hello; print hello()'

178voto

Wolph Punkte 73880

Setzen Sie einfach hello() irgendwo unterhalb der Funktion und sie wird ausgeführt, wenn Sie python your_file.py

Für eine sauberere Lösung können Sie dies verwenden:

if __name__ == '__main__':
    hello()

Auf diese Weise wird die Funktion nur ausgeführt, wenn Sie die Datei ausführen, nicht wenn Sie die Datei importieren.

109voto

Noam Hacker Punkte 4213

Fügen Sie dieses Snippet am Ende Ihres Skripts ein

def myfunction():
    ...

if __name__ == '__main__':
    globals()[sys.argv[1]]()

Sie können nun Ihre Funktion aufrufen, indem Sie

python myscript.py myfunction

Das funktioniert, weil Sie das Kommandozeilenargument (eine Zeichenkette mit dem Namen der Funktion) an locals , ein Wörterbuch mit einer aktuellen lokalen Symboltabelle. Die Klammern am Ende bewirken, dass die Funktion aufgerufen wird.

aktualisieren: wenn Sie möchten, dass die Funktion einen Parameter von der Befehlszeile akzeptiert, können Sie in sys.argv[2] wie diese:

def myfunction(mystring):
    print(mystring)

if __name__ == '__main__':
    globals()[sys.argv[1]](sys.argv[2])

Auf diese Weise wird die python myscript.py myfunction "hello" wird ausgegeben hello .

85voto

Tamás Punkte 45697

python -c 'from myfile import hello; hello()' wobei myfile muss durch den Basisnamen Ihres Python-Skripts ersetzt werden. (z.B., myfile.py wird myfile ).

Wenn jedoch hello() Ihr "permanenter" Haupteinstiegspunkt in Ihrem Python-Skript ist, dann ist der übliche Weg, dies wie folgt zu tun:

def hello():
    print "Hi :)"

if __name__ == "__main__":
    hello()

So können Sie das Skript einfach ausführen, indem Sie python myfile.py o python -m myfile .

Hier eine Erklärung: __name__ ist eine spezielle Python-Variable, die den Namen des Moduls enthält, das gerade ausgeführt wird, außer wenn das Modul von der Kommandozeile aus gestartet wird, in diesem Fall wird es "__main__" .

38voto

D. Jagatiya Punkte 313

Wir können etwas in dieser Art schreiben. Ich habe mit python-3.7.x verwendet

import sys

def print_fn():
    print("Hi")

def sum_fn(a, b):
    print(a + b)

if __name__ == "__main__":
    args = sys.argv
    # args[0] = current file
    # args[1] = function name
    # args[2:] = function args : (*unpacked)
    globals()[args[1]](*args[2:])

python demo.py print_fn
python demo.py sum_fn 5 8

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X