Shell Script: Jalankan program python dari dalam skrip shell

139

Saya sudah mencoba googling jawabannya tetapi tidak berhasil.

Saya perlu menggunakan server superkomputer karya saya, tetapi agar skrip python saya dapat berjalan, itu harus dijalankan melalui skrip shell.

Misalnya saya ingin job.shmengeksekusipython_script.py

Bagaimana ini bisa dicapai?

Harpal
sumber
2
Sudahkah Anda mencoba memasukkan python python_script.pyskrip shell Anda?
thkala
Um python python_script.py,. Atau hanya ./python_script.pyjika skrip mendapat shebang.
2
@delnan: ./python_script.py juga mensyaratkan bahwa skrip dapat dieksekusi
thkala
apa sebenarnya yang sudah Anda coba dan apa masalahnya? Entah Anda tidak melakukan yang baik dari pencarian google, atau ada banyak yang Anda tidak memberi tahu kami ...
thkala
3
Ini adalah pertanyaan yang agak lama tetapi jawaban terbaik / terlengkap adalah yang oleh João Víctor. Pastikan untuk membacanya.
Still.Tony

Jawaban:

193

Pastikan python executable ada di variabel lingkungan PATH Anda lalu tambahkan skrip Anda

python path/to/the/python_script.py

Detail:

  • Di file job.sh, taruh ini
#!/bin/sh
python python_script.py
  • Jalankan perintah ini untuk membuat skrip dapat dijalankan untuk Anda: chmod u+x job.sh
  • Menjalankannya : ./job.sh
Jean-Bernard Jansen
sumber
2
Itu tergantung pada sistem Anda. Python 3 mungkin merupakan runtime python default, atau mungkin juga tidak. Anda dapat memeriksa dengan menjalankan python --version, dan Anda dapat menegakkan versi dengan python3 hello.py.
Jean-Bernard Jansen
Apa yang harus dilakukan jika tidak menemukan impor yang sudah terpasang, seperti panda?
mah65
Itu berarti Anda meluncurkan biner python yang salah atau lingkungan tidak benar. Dalam hal ini, Anda harus mengisi virtualenv, kemudian jalankan source PATH/TO/VENV/bin/activatelalu panggilpython python_script.py
Jean-Bernard Jansen
Saya mencoba melakukan ini di automator, dan saya mendapatkan kesalahan; /path/to/Python: can't open file '/path/to/script': [Errno 1] Operation not permittedapakah ada cara untuk memasukkan kode python saya sebaris dalam skrip bash?
Keyslinger
111

Metode 1 - Buat skrip shell:

Misalkan Anda memiliki file python, hello.py Buat file bernama job.shyang berisi

#!/bin/bash
python hello.py

tandai itu dapat dieksekusi menggunakan

$ chmod +x job.sh

kemudian jalankan

$ ./job.sh

Metode 2 (LEBIH BAIK) - Buat python itu sendiri dijalankan dari shell:

Ubah skrip Anda hello.pydan tambahkan ini sebagai baris pertama

#!/usr/bin/env python

tandai itu dapat dieksekusi menggunakan

$ chmod +x hello.py

kemudian jalankan

$ ./hello.py
João Víctor
sumber
5
Harap edit jawaban Anda agar lebih mudah dibaca. Anda dapat menggunakan tombol 101010 di editor jawaban untuk menandai konten skrip sebagai kode.
thkala
1
Saya selalu lupa #!/usr/bin/env python. Ingatlah untuk memastikan Anda mereferensikan path versi + python yang tepat untuk sistem Anda!
Still.Tony
10

Imho, menulis

python /path/to/script.py

Sangat salah, terutama di hari-hari ini. Python yang mana? python2.6? 2,7? 3,0? 3.1? Sebagian besar kali Anda perlu menentukan versi python di tag shebang dari file python. Saya mendorong untuk menggunakan

#! / usr / bin / env python2 #atau python2.6 atau python3 atau bahkan python3.1
untuk kompatibilitas.

Dalam kasus seperti itu, jauh lebih baik untuk membuat skrip dapat dieksekusi dan menjalankannya secara langsung:

#! / bin / bash

/path/to/script.py

Dengan cara ini, versi python yang Anda butuhkan hanya ditulis dalam satu file. Sebagian besar sistem saat ini memiliki python2 dan python3 sementara itu, dan kebetulan bahwa symlink python menunjuk ke python3 , sementara kebanyakan orang mengharapkannya menunjuk ke python2 .

Enrico Carlesso
sumber
1
Bisakah Anda melewati parameter dengan cara yang sama dengan python script.py param?
kristian
@kristian ya./abc.py -h
7

Simpan program berikut ini sebagai print.py:

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

Kemudian dalam tipe terminal:

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

Ini bekerja paling baik untuk saya: Tambahkan ini di bagian atas skrip:

#!c:/Python27/python.exe

(C: \ Python27 \ python.exe adalah path ke python.exe di komputer saya) Kemudian jalankan skrip melalui:

chmod +x script-name.py && script-name.py
peterb
sumber
Hanya untuk memperjelas, ini khusus Windows. Dan prompt yang saya gunakan adalah bash Git. Saya merasa sangat berguna. Terutama di lingkungan Windows
peterb
4

Ini bekerja untuk saya:

  1. Buat pekerjaan file shell baru. Jadi katakanlah: touch job.shdan tambahkan perintah untuk menjalankan skrip python (Anda bahkan dapat menambahkan argumen baris perintah ke python itu, saya biasanya menentukan sebelumnya argumen baris perintah saya).

    chmod +x job.sh

  2. Di dalam job.shmenambahkan file py berikut, katakanlah:

    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"

Output dari job.sh akan terlihat seperti ini:

Done with python_file.py

Done with python_file1.py

Saya menggunakan ini biasanya ketika saya harus menjalankan beberapa file python dengan argumen yang berbeda, yang telah ditentukan sebelumnya.

Catatan: Hanya dengan cepat mengetahui apa yang terjadi di sini:

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

  • Di sini skrip shell akan menjalankan file python_file.py dan menambahkan beberapa argumen baris perintah pada saat run time ke file python.
  • Ini tidak berarti, Anda harus melewati argumen baris perintah juga.
  • Anda bisa menggunakannya seperti python python_file.py:, polos dan sederhana. Selanjutnya, >> akan mencetak dan menyimpan output dari file .py ini dalam file testpy-output.txt.
  • && adalah operator logis yang akan berjalan hanya setelah hal di atas dieksekusi dengan sukses dan sebagai gema opsional "dilengkapi dengan python_file.py" akan digaungkan ke cli / terminal Anda pada waktu berjalan.
geekidharsh
sumber
4

Anda harus dapat memanggilnya sebagai python scriptname.pymis

# !/bin/bash

python /home/user/scriptname.py 

Pastikan juga skrip memiliki izin untuk dijalankan.

Anda dapat membuatnya dapat dieksekusi dengan menggunakan chmod u+x scriptname.py.

Shpongle
sumber
2

Saya menggunakan ini dan berfungsi dengan baik

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

Karena posting lain mengatakan segalanya (dan saya menemukan posting ini sambil mencari yang berikut).
Berikut ini cara mengeksekusi skrip python dari skrip python lain:

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)

dan Anda dapat menyediakan args dengan menyediakan beberapa lainnya sys.argv

dCSeven
sumber