Shell-Skript: Führen Sie ein Python-Programm in einem Shell-Skript aus

139

Ich habe versucht, die Antwort zu googeln, aber ohne Glück.

Ich muss meinen Works Supercomputer-Server verwenden, aber damit mein Python-Skript ausgeführt werden kann, muss es über ein Shell-Skript ausgeführt werden.

Zum Beispiel möchte ich job.shausführenpython_script.py

Wie kann dies erreicht werden?

Harpal
quelle
2
Haben Sie versucht, nur python python_script.pyIhr Shell-Skript einzufügen?
Thkala
Ähm , python python_script.py. Oder nur, ./python_script.pywenn das Drehbuch einen Scheiß bekommen hat.
2
@delnan: ./python_script.py erfordert auch, dass das Skript ausführbar ist
thkala
Was genau hast du versucht und was ist das Problem? Entweder haben Sie eine Google-Suche nicht so gut gemacht, oder es gibt eine Menge, die Sie uns nicht erzählen ...
Thkala
3
Dies ist eine ziemlich alte Frage, aber die beste / vollständigste Antwort ist die von João Víctor. Lesen Sie es unbedingt durch.
Still.Tony

Antworten:

193

Stellen Sie einfach sicher, dass sich die ausführbare Python-Datei in Ihrer PATH-Umgebungsvariablen befindet, und fügen Sie sie dann in Ihr Skript ein

python path/to/the/python_script.py

Einzelheiten:

  • Fügen Sie dies in die Datei job.sh ein
#!/bin/sh
python python_script.py
  • Führen Sie diesen Befehl aus, um das Skript für Sie ausführbar zu machen: chmod u+x job.sh
  • Starte es : ./job.sh
Jean-Bernard Jansen
quelle
2
Das hängt von Ihrem System ab. Python 3 ist möglicherweise die Standard-Python-Laufzeit oder nicht. Sie können dies überprüfen, indem Sie ausführen python --version, und Sie können die Version mit erzwingen python3 hello.py.
Jean-Bernard Jansen
Was tun, wenn die bereits installierten Importe wie Pandas nicht gefunden werden?
Mah65
Dies bedeutet, dass Sie die falsche Python-Binärdatei gestartet haben oder die Umgebung nicht richtig ist. In diesem Fall sollten Sie eine virtuelle Umgebung ausfüllen, dann ausführen und source PATH/TO/VENV/bin/activatedann anrufenpython python_script.py
Jean-Bernard Jansen
Ich versuche dies im Automator zu tun und erhalte eine Fehlermeldung. /path/to/Python: can't open file '/path/to/script': [Errno 1] Operation not permittedGibt es eine Möglichkeit, meinen Python-Code in das Bash-Skript aufzunehmen?
Keyslinger
111

Methode 1 - Erstellen Sie ein Shell-Skript:

Angenommen, Sie haben eine Python-Datei. hello.py Erstellen Sie eine Datei mit dem Namen job.sh, die Folgendes enthält

#!/bin/bash
python hello.py

Markieren Sie es als ausführbar mit

$ chmod +x job.sh

dann starte es

$ ./job.sh

Methode 2 (BESSER) - Lassen Sie die Python selbst von der Shell laufen:

Ändern Sie Ihr Skript hello.pyund fügen Sie dies als erste Zeile hinzu

#!/usr/bin/env python

Markieren Sie es als ausführbar mit

$ chmod +x hello.py

dann starte es

$ ./hello.py
Joao Victor
quelle
5
Bitte bearbeiten Sie Ihre Antwort, um sie besser lesbar zu machen. Mit der Schaltfläche 101010 im Antworteditor können Sie den Skriptinhalt als Code markieren.
Thkala
1
Ich vergesse immer #!/usr/bin/env python. Denken Sie daran, sicherzustellen, dass Sie auf die richtige Python-Version + den richtigen Pfad für Ihr System verweisen!
Still.Tony
10

Imho, schreibend

python /path/to/script.py

Ist ganz falsch, vor allem in diesen Tagen. Welche Python? Python2.6? 2,7? 3,0? 3.1? In den meisten Fällen müssen Sie die Python-Version im Shebang-Tag der Python-Datei angeben. Ich ermutige zu verwenden

#! / usr / bin / env python2 #oder python2.6 oder python3 oder sogar python3.1
aus Kompatibilitätsgründen.

In einem solchen Fall ist es viel besser, das Skript ausführbar zu haben und es direkt aufzurufen:

#! / bin / bash

/path/to/script.py

Auf diese Weise wird die von Ihnen benötigte Python-Version nur in eine Datei geschrieben. Die meisten Systeme haben heutzutage in der Zwischenzeit Python2 und Python3, und es kommt vor, dass der Symlink Python auf Python3 verweist , während die meisten Leute erwarten, dass er auf Python2 verweist .

Enrico Carlesso
quelle
1
Können Sie Parameter genauso übergeben wie mit python script.py param?
Kristian
@kristian ja./abc.py -h
7

Speichern Sie das folgende Programm als print.py:

#!/usr/bin/python3
print('Hello World')

Dann im Terminaltyp:

chmod +x print.py
./print.py
Nishant Ingle
quelle
4

Dies funktioniert am besten für mich: Fügen Sie dies oben im Skript hinzu:

#!c:/Python27/python.exe

(C: \ Python27 \ python.exe ist der Pfad zur python.exe auf meinem Computer.) Führen Sie dann das Skript aus über:

chmod +x script-name.py && script-name.py
Peterb
quelle
Zur Verdeutlichung ist dies Windows-spezifisch. Und die Eingabeaufforderung, die ich benutze, ist die Git-Bash. Ich finde es super nützlich. Besonders in der Windows-Umgebung
Peterb
4

Das funktioniert bei mir:

  1. Erstellen Sie einen neuen Shell-Dateijob. Nehmen wir also an: touch job.shund fügen Sie einen Befehl hinzu, um das Python-Skript auszuführen (Sie können diesem Python sogar Befehlszeilenargumente hinzufügen, normalerweise definiere ich meine Befehlszeilenargumente vor).

    chmod +x job.sh

  2. Fügen job.shSie im Inneren die folgenden py-Dateien hinzu, sagen wir:

    python_file.py argument1 argument2 argument3 >> testpy-output.txt && echo "Done with python_file.py"

    python_file1.py argument1 argument2 argument3 >> testpy-output.txt && echo "Done with python_file1.py"

Die Ausgabe von job.sh sollte folgendermaßen aussehen:

Done with python_file.py

Done with python_file1.py

Ich benutze dies normalerweise, wenn ich mehrere Python-Dateien mit unterschiedlichen, vordefinierten Argumenten ausführen muss.

Hinweis: Nur ein kurzer Überblick darüber, was hier vor sich geht:

python_file.py argument1 argument2 argument3 >> testpy-output.txt && echo "completed with python_file.py" . 

  • Hier Shell - Skript wird die Datei ausführen python_file.py und mehrere Befehlszeile hinzufügen Argumente zur Laufzeit auf die Python - Datei.
  • Dies bedeutet nicht unbedingt, dass Sie auch Befehlszeilenargumente übergeben müssen.
  • Sie können es einfach so verwenden : python python_file.py, schlicht und einfach. Als nächstes druckt >> die Ausgabe dieser .py-Datei und speichert sie in der Datei testpy-output.txt.
  • && ist ein logischer Operator, der erst ausgeführt wird, nachdem das oben Gesagte erfolgreich ausgeführt wurde, und als optionales Echo "mit python_file.py abgeschlossen" zur Laufzeit an Ihr cli / terminal weitergeleitet wird.
geekidharsh
quelle
4

Sie sollten es als python scriptname.pyz

# !/bin/bash

python /home/user/scriptname.py 

Stellen Sie außerdem sicher, dass das Skript über Berechtigungen zum Ausführen verfügt.

Sie können es mithilfe von ausführbar machen chmod u+x scriptname.py.

Shpongle
quelle
2

Ich benutze dies und es funktioniert gut

#/bin/bash
/usr/bin/python python python_script.py
Max Hay
quelle
1

Da die anderen Beiträge alles sagen (und ich auf diesen Beitrag gestoßen bin, als ich nach Folgendem gesucht habe).
So führen Sie ein Python-Skript aus einem anderen Python-Skript aus:

Python 2:

execfile("somefile.py", global_vars, local_vars)

Python 3:

with open("somefile.py") as f:
    code = compile(f.read(), "somefile.py", 'exec')
    exec(code, global_vars, local_vars)

und Sie können Argumente liefern, indem Sie andere bereitstellen sys.argv

dCSeven
quelle