Skrypt powłoki: Wykonaj program w języku Python z poziomu skryptu powłoki

139

Próbowałem znaleźć odpowiedź w Google, ale bez powodzenia.

Muszę użyć mojego serwera superkomputera, ale aby mój skrypt w Pythonie działał, musi być wykonywany za pośrednictwem skryptu powłoki.

Na przykład chcę job.shwykonaćpython_script.py

Jak można to osiągnąć?

Harpal
źródło
2
Czy próbowałeś po prostu wstawić python python_script.pyswój skrypt powłoki?
thkala
Hm python python_script.py. Albo po prostu, ./python_script.pyjeśli scenariusz dostanie shebang.
2
@delnan: ./python_script.py wymaga również, aby skrypt był wykonywalny
thkala
czego dokładnie próbowałeś i jaki jest problem? Albo nie zrobiłeś tak dobrego wyszukiwania w Google, albo jest wiele rzeczy, o których nam nie mówisz ...
thkala
3
To dość stare pytanie, ale najlepszą / najpełniejszą odpowiedzią jest ta, którą napisał João Víctor. Koniecznie przeczytaj.
Still.Tony

Odpowiedzi:

193

Po prostu upewnij się, że plik wykonywalny Pythona znajduje się w zmiennej środowiskowej PATH, a następnie dodaj swój skrypt

python path/to/the/python_script.py

Detale:

  • W pliku job.sh umieść to
#!/bin/sh
python python_script.py
  • Wykonaj to polecenie, aby skrypt działał za Ciebie: chmod u+x job.sh
  • Uruchom : ./job.sh
Jean-Bernard Jansen
źródło
2
To zależy od twojego systemu. Python 3 może być domyślnym środowiskiem wykonawczym Pythona lub nie. Możesz sprawdzić, uruchamiając python --version, i możesz wymusić wersję za pomocą python3 hello.py.
Jean-Bernard Jansen
Co zrobić, jeśli nie znajdzie już zainstalowanych importów, takich jak pandy?
mah65
Oznacza to, że uruchomiłeś niewłaściwy plik binarny Pythona lub środowisko jest nieprawidłowe. W takim przypadku powinieneś wypełnić virtualenv, następnie uruchomić source PATH/TO/VENV/bin/activatei zadzwonićpython python_script.py
Jean-Bernard Jansen
Próbuję to zrobić w automacie i otrzymuję błąd; /path/to/Python: can't open file '/path/to/script': [Errno 1] Operation not permittedczy istnieje sposób na zawarcie mojego kodu w języku Python w skrypcie bash?
Keyslinger
111

Metoda 1 - Utwórz skrypt powłoki:

Załóżmy, że masz plik Pythona hello.py Utwórz plik o nazwie, job.shktóry zawiera

#!/bin/bash
python hello.py

oznacz to jako wykonywalne za pomocą

$ chmod +x job.sh

następnie uruchom go

$ ./job.sh

Metoda 2 (LEPSZA) - Spraw, aby sam Python był uruchamiany z powłoki:

Zmodyfikuj skrypt hello.pyi dodaj go jako pierwszą linię

#!/usr/bin/env python

oznacz to jako wykonywalne za pomocą

$ chmod +x hello.py

następnie uruchom go

$ ./hello.py
Joao zwycięzca
źródło
5
Zmień swoją odpowiedź, aby była bardziej czytelna. Możesz użyć przycisku 101010 w edytorze odpowiedzi, aby oznaczyć zawartość skryptu jako kod.
thkala,
1
Zawsze zapominam #!/usr/bin/env python. Pamiętaj, aby upewnić się, że odwołujesz się do właściwej wersji Pythona + ścieżki dla swojego systemu!
Still.Tony
10

Imho, piszę

python /path/to/script.py

Jest całkiem źle, szczególnie w dzisiejszych czasach. Który Python? python2.6? 2,7? 3.0? 3.1? W większości przypadków musisz określić wersję pythona w tagu shebang pliku python. Zachęcam do korzystania

#! / usr / bin / env python2 # lub python2.6 lub python3 lub nawet python3.1
dla kompatybilności.

W takim przypadku znacznie lepiej jest mieć skrypt wykonywalny i wywołać go bezpośrednio:

#! / bin / bash

/path/to/script.py

W ten sposób potrzebna wersja Pythona jest zapisywana tylko w jednym pliku. Obecnie większość systemów ma python2 i python3 i zdarza się, że python dowiązania symbolicznego wskazuje na python3 , podczas gdy większość ludzi spodziewa się, że wskazuje na python2 .

Enrico Carlesso
źródło
1
Czy możesz przekazywać parametry w taki sam sposób, jak w przypadku python script.py param?
kristian
@kristian yes./abc.py -h
7

Zapisz następujący program jako print.py:

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

Następnie w typie terminala:

chmod +x print.py
./print.py
Nishant Ingle
źródło
4

To działa najlepiej dla mnie: dodaj to na początku skryptu:

#!c:/Python27/python.exe

(C: \ Python27 \ python.exe to ścieżka do python.exe na moim komputerze) Następnie uruchom skrypt za pomocą:

chmod +x script-name.py && script-name.py
peterb
źródło
Dla wyjaśnienia, jest to specyficzne dla systemu Windows. A monitem, którego używam, jest Git bash. Uważam, że jest to bardzo przydatne. Zwłaszcza w środowisku Windows
peterb
4

To działa dla mnie:

  1. Utwórz nowe zadanie pliku powłoki. Powiedzmy więc: touch job.shi dodaj polecenie, aby uruchomić skrypt Pythona (możesz nawet dodać argumenty wiersza poleceń do tego Pythona, zwykle wstępnie definiuję argumenty wiersza poleceń).

    chmod +x job.sh

  2. Wewnątrz job.shdodaj następujące pliki py, powiedzmy:

    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"

Wynik zadania job.sh powinien wyglądać następująco:

Done with python_file.py

Done with python_file1.py

Zwykle używam tego, gdy muszę uruchomić wiele plików Pythona z różnymi, wstępnie zdefiniowanymi argumentami.

Uwaga: tylko krótkie ostrzeżenie o tym, co się tutaj dzieje:

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

  • Tutaj skrypt powłoki uruchomi plik python_file.py i doda wiele argumentów wiersza poleceń w czasie wykonywania do pliku Pythona.
  • Niekoniecznie oznacza to, że musisz również przekazywać argumenty wiersza poleceń.
  • Możesz go po prostu użyć w następujący sposób python python_file.py:, prosty i prosty. Następnie >> wydrukuje i zapisze wynik tego pliku .py w pliku testpy-output.txt.
  • && jest operatorem logicznym, który będzie działał tylko po pomyślnym wykonaniu powyższego i jako opcjonalne echo „zakończone python_file.py” zostanie przekazane do twojego cli / terminal w czasie wykonywania.
geekidharsh
źródło
4

Powinieneś móc go wywołać jako python scriptname.pynp

# !/bin/bash

python /home/user/scriptname.py 

Upewnij się również, że skrypt ma uprawnienia do uruchamiania.

Możesz uczynić go wykonywalnym za pomocą chmod u+x scriptname.py.

Shpongle
źródło
2

Używam tego i działa dobrze

#/bin/bash
/usr/bin/python python python_script.py
Max Hay
źródło
1

Ponieważ inne posty mówią wszystko (i natknąłem się na ten post, szukając następującego).
Oto sposób wykonania skryptu w języku Python z innego skryptu w języku Python:

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)

i możesz podać argumenty, podając inne sys.argv

dCSeven
źródło