Ich habe diesen Code:
def hello():
return 'Hi :)'
Wie würde ich dies direkt über die Befehlszeile ausführen?
python
function
command-line
Steven
quelle
quelle
print "Hi :)"
stattreturn 'Hi :)'
.Antworten:
Mit dem Argument
-c
(Befehl) (vorausgesetzt, Ihre Datei heißtfoo.py
):Alternativ, wenn Sie sich nicht für die Verschmutzung von Namespaces interessieren:
Und der Mittelweg:
quelle
$python -c "import foo;foo.hello()"
print foo.hello()
durchprint(foo.hello())
tat. Ich habe nicht das Python-Wissen, um zu erklären, warum dies so ist. Wenn also jemand anderes erklären könnte, was los sein kann, wäre das sehr dankbarPlatzieren Sie es einfach
hello()
irgendwo unterhalb der Funktion und sie wird ausgeführt, wenn Sie dies tunpython your_file.py
Für eine sauberere Lösung können Sie Folgendes verwenden:
Auf diese Weise wird die Funktion nur ausgeführt, wenn Sie die Datei ausführen, nicht beim Importieren der Datei.
quelle
hello()
Argumente verwendet werden, die über die Befehlszeile bereitgestellt werden sollen?sys.argv
an die Methode senden . Oder greifen Sie über die Hallo-Methode darauf zuhello()
) aus und führe sie über die Kommandozeile aus?python -c 'from myfile import hello; hello()'
womyfile
muss durch den Basisnamen Ihres Python-Skripts ersetzt werden. (ZBmyfile.py
wirdmyfile
).Wenn
hello()
es sich jedoch um Ihren "permanenten" Haupteinstiegspunkt in Ihrem Python-Skript handelt, gehen Sie wie folgt vor:Auf diese Weise können Sie das Skript einfach ausführen, indem Sie
python myfile.py
oder ausführenpython -m myfile
.Einige Erklärungen hier:
__name__
ist eine spezielle Python-Variable, die den Namen des Moduls enthält, das gerade ausgeführt wird, außer wenn das Modul über die Befehlszeile gestartet wird"__main__"
. In diesem Fall wird es .quelle
python -m foo -c 'foo.bar()'
undpython -c 'import foo; foo.bar()'
? Ich bekomme ein anderes Verhalten, bei dem das Argument -c im ersten Fall ignoriert wird.Ich habe ein kurzes kleines Python-Skript geschrieben, das über eine Bash-Befehlszeile aufgerufen werden kann. Es enthält den Namen des Moduls, der Klasse und der Methode, die Sie aufrufen möchten, sowie die Parameter, die Sie übergeben möchten. Ich nenne es PyRun und habe die Erweiterung .py weggelassen und es mit chmod + x PyRun ausführbar gemacht, so dass ich es einfach schnell wie folgt aufrufen kann:
Speichern Sie dies in einer Datei namens PyRun
Hier ist ein Beispielmodul, um zu zeigen, wie es funktioniert. Dies wird in einer Datei namens PyTest.py gespeichert:
Versuchen Sie, diese Beispiele auszuführen:
Beachten Sie das letzte Beispiel für das Überschreiben der Klammern, um ein Tupel als einzigen Parameter an die zweite Methode zu übergeben.
Wenn Sie zu wenige Parameter für die Anforderungen der Methode übergeben, wird eine Fehlermeldung angezeigt. Wenn Sie zu viele bestehen, werden die Extras ignoriert. Das Modul muss sich im aktuellen Arbeitsordner befinden. PyRun kann sich an einer beliebigen Stelle in Ihrem Pfad befinden.
quelle
Fügen Sie dieses Snippet am Ende Ihres Skripts hinzu
Sie können Ihre Funktion jetzt durch Ausführen aufrufen
Dies funktioniert, weil Sie das Befehlszeilenargument (eine Zeichenfolge des Funktionsnamens) an
locals
ein Wörterbuch mit einer aktuellen lokalen Symboltabelle übergeben. Durch die Klammern am Ende wird die Funktion aufgerufen.Update: Wenn die Funktion einen Parameter über die Befehlszeile akzeptieren soll, können Sie Folgendes übergeben
sys.argv[2]
:Auf diese Weise wird das Ausführen
python myscript.py myfunction "hello"
ausgegebenhello
.quelle
myfunction(12)
Machen wir es uns etwas leichter und verwenden einfach ein Modul ...
Versuchen:
pip install compago
Dann schreibe:
Dann verwenden Sie wie folgt:
Hinweis: In Python 3 gibt es derzeit einen Fehler , der jedoch mit Python 2 hervorragend funktioniert.
Bearbeiten: Eine noch bessere Option ist meiner Meinung nach das Modul Feuer von Google, das es einfach macht, auch Funktionsargumente zu übergeben. Es ist installiert mit
pip install fire
. Von ihrem GitHub:Hier ist ein einfaches Beispiel.
Anschließend können Sie über die Befehlszeile Folgendes ausführen:
quelle
python -m fire file_name method_name
. Es hat auch einen eingebauten Argparser.Interessanterweise können Sie Eingaben in den Python-Interpreter wie folgt weiterleiten, wenn das Ziel darin bestand, auf der Befehlszeilenkonsole zu drucken oder eine andere winzige Python-Operation auszuführen:
sowie Pipe-Dateien ..
* Beachten Sie, dass die Erweiterung nicht .py sein muss, damit die zweite funktioniert. ** Beachten Sie auch, dass Sie für Bash möglicherweise die Zeichen maskieren müssen
quelle
echo import foo;foo.hello() | python
echo 'print("hi:)")' | python
Wenn Sie das Runp-Paket installieren, müssen Sie Folgendes ausführen
pip install runp
:runp myfile.py hello
Sie finden das Repository unter: https://github.com/vascop/runp
quelle
Ich musste verschiedene Python-Dienstprogramme (Bereich, Zeichenfolge usw.) in der Befehlszeile verwenden und hatte das Tool pyfunc speziell dafür geschrieben. Sie können es verwenden, um Ihre Benutzererfahrung bei der Befehlszeile zu verbessern:
quelle
Es ist immer eine Option, Python in der Befehlszeile mit dem Befehl Python einzugeben
Importieren Sie dann Ihre Datei, also importieren Sie example_file
Führen Sie dann den Befehl mit example_file.hello () aus.
Dies vermeidet die seltsame .pyc-Kopierfunktion, die jedes Mal auftritt, wenn Sie python -c usw. ausführen.
Möglicherweise nicht so praktisch wie ein einzelner Befehl, aber eine gute schnelle Lösung, um eine Datei über die Befehlszeile zu schreiben, und ermöglicht es Ihnen, Python zum Aufrufen und Ausführen Ihrer Datei zu verwenden.
quelle
So etwas wie das: call_from_terminal.py
Dies funktioniert in Bash.
quelle
Unten finden Sie die Datei Odd_Even_function.py mit der Definition der Funktion.
Um das gleiche von der Eingabeaufforderung unten aufzurufen, sind die Optionen für mich gearbeitet.
Optionen 1 Vollständiger Pfad der exe \ python.exe -c "Odd_Even_function importieren; Odd_Even_function.OE (100)"
Option 2 Vollständiger Pfad der exe \ python.exe -c "aus Odd_Even_function import OE; OE (100)"
Vielen Dank.
quelle
Diese Funktion kann nicht über die Befehlszeile ausgeführt werden, da sie einen Wert zurückgibt, der unbehandelt bleibt. Sie können die Rücksendung entfernen und stattdessen print verwenden
quelle
Verwenden Sie das Python-C- Tool ( pip install python-c ) und schreiben Sie dann einfach:
oder falls in Ihren Python-Dateien keine Funktionsnamenkonflikte auftreten:
quelle
Zuerst müssen Sie die Funktion aufrufen, wie sie Ihnen mitgeteilt wurde, oder die Funktion zeigt nichts in der Ausgabe an. Speichern Sie anschließend die Datei und kopieren Sie den Pfad der Datei, indem Sie mit der rechten Maustaste in den Ordner der Datei klicken und dann auf "Datei kopieren" klicken Gehen Sie zum Terminal und schreiben Sie: - cd "den Pfad der Datei" - Python "Name der Datei zum Beispiel (main.py)" danach wird die Ausgabe Ihres Codes angezeigt.
quelle
Erleichtern Sie sich das Leben und installieren Sie Spyder. Öffnen Sie Ihre Datei und führen Sie sie aus (klicken Sie auf den grünen Pfeil). Anschließend wird Ihre
hello()
Methode definiert und der IPython-Konsole bekannt, sodass Sie sie von der Konsole aus aufrufen können.quelle