wake-up-neo.com

Shell-Skript: Führen Sie ein Python-Programm innerhalb eines Shell-Skripts aus

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

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

Zum Beispiel möchte ich, dass job.shpython_script.py ausführt.

Wie kann das erreicht werden?

85
Harpal

Stellen Sie nur sicher, dass sich die ausführbare Python-Datei in Ihrer Umgebungsvariablen PATH befindet, und fügen Sie sie 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 lauffähig zu machen: chmod u+x job.sh
  • Führen Sie es aus: ./job.sh
131

Methode 1 - Erstellen Sie ein Shell-Skript:

Angenommen, Sie haben eine Python-Datei hello.py Erstellen Sie eine Datei namens job.sh, die enthält

#!/bin/bash
python hello.py

kennzeichnen Sie es mit

$ chmod +x job.sh

dann führe es aus

$ ./job.sh

Methode 2 (BETTER) - Der Python selbst wird von Shell ausgeführt:

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

#!/usr/bin/env python

kennzeichnen Sie es mit

$ chmod +x hello.py

dann führe es aus

$ ./hello.py
85
João Víctor

Ich schreibe 

python /path/to/script.py

Ist ganz falsch, besonders in diesen Tagen. Welcher 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
für die Kompatibilität.

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

 #!/bin/bash 

/Pfad/zu/script.py 

Auf diese Weise wird die benötigte Version von Python nur in einer 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 davon ausgehen, dass er auf Python2 zeigt.

8
Enrico Carlesso

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 Datei python.exe auf meinem Computer.).

chmod +x script-name.py && script-name.py
3
peterb

sie sollten es als Python scriptname.py aufrufen können

z.B 

# !/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 mit chmod u + x scriptname.py ausführbar machen

EDIT: dazu geschlagen :-p

3
Shpongle

Speichern Sie das folgende Programm als print.py:

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

Dann im Terminaltyp:

chmod +x print.py
./print.py
2
Nishant Ingle

Das funktioniert für mich: 

  1. Erstellen Sie einen neuen Shell-Dateijob. Sagen wir also: touch job.sh und fügen Sie den Befehl zum Ausführen des Python-Skripts hinzu (Sie können diesem Python sogar Befehlszeilenargumente hinzufügen, ich definiere normalerweise meine Befehlszeilenargumente vor).

    chmod +x job.sh

  2. Fügen Sie in job.sh 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"

Done with python_file.py

Done with python_file1.py

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

Hinweis: Nur ein kurzer Blick auf das, was hier los ist: 

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

  • Hier führt das Shell-Skript die Datei python_file.py aus und fügt zur Laufzeit mehrere Befehlszeilen arguments zur Python-Datei hinzu. 
  • Dies bedeutet nicht notwendigerweise, dass Sie auch Befehlszeilenargumente übergeben müssen. 
  • Sie können es einfach wie folgt verwenden: python python_file.py, schlicht und einfach. Als Nächstes druckt der >> die Ausgabe dieser .py-Datei in der Datei testpy-output.txt und speichert sie. 
  • && ist ein logischer Operator, der erst ausgeführt wird, wenn der obige Vorgang erfolgreich ausgeführt wurde. Als Option wird echo "mit python_file.py abgeschlossen" beim Ausführen in Ihrem cli/terminal angezeigt Zeit. 
2
geekidharsh

Ich benutze das und es funktioniert gut

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

Da die anderen Beiträge alles sagen (und ich bin über diesen Beitrag gestolpert, während ich nach dem Folgenden suche). 
So können Sie ein Python-Skript aus einem anderen Python-Skript ausführen:

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 einen anderen sys.argv angeben.

0
dCSeven