Ich habe diesen Code:
def hello():
return 'Hi :)'
Wie kann ich dies direkt von der Befehlszeile aus ausführen?
Ich habe diesen Code:
def hello():
return 'Hi :)'
Wie kann ich dies direkt von der Befehlszeile aus ausführen?
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()'
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.
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
.
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__"
.
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 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.