The subproses modul akan membantu Anda keluar.
Contoh sepele yang mencolok:
>>> import subprocess
>>> subprocess.call(['./test.sh']) # Thanks @Jim Dennis for suggesting the []
0
>>>
Di mana test.sh
skrip shell sederhana dan 0
merupakan nilai balik untuk proses ini.
chmod +x script.sh
,. Catatan: script.sh adalah pengganti untuk skrip Anda, ganti sesuai.Ada beberapa cara menggunakan
os.popen()
(usang) atau seluruhsubprocess
modul, tetapi pendekatan iniadalah salah satu yang termudah.
sumber
subprocess
Anda dapat mengelola pipa input / output / kesalahan. Ini juga lebih baik ketika Anda memiliki banyak argumen - denganos.command()
Anda harus membuat seluruh baris perintah dengan melarikan diri karakter khusus, dengansubprocess
ada daftar argumen sederhana. Tetapi untuk tugasos.command()
- tugas sederhana mungkin cukup.The subprocess module provides more powerful facilities for spawning new processes and retrieving their results; *using that module is preferable to using this function.*
Jika Anda ingin mengirimkan beberapa parameter ke skrip shell, Anda dapat menggunakan metode shlex.split () :
dengan
test.sh
di folder yang sama:Output:
sumber
Dengan asumsi test.sh adalah skrip shell yang ingin Anda jalankan
sumber
Gunakan modul subproses seperti yang disebutkan di atas.
Saya menggunakannya seperti ini:
sumber
Saya menjalankan python 3.5 dan subprocess.call (['./ test.sh']) tidak berfungsi untuk saya.
Saya memberi Anda tiga solusi tergantung pada apa yang ingin Anda lakukan dengan output.
1 - skrip panggilan. Anda akan melihat output di terminal Anda. output adalah angka.
2 - panggilan dan eksekusi dump dan kesalahan ke dalam string. Anda tidak melihat eksekusi di terminal Anda kecuali jika Anda mencetak (stdout). Shell = Benar sebagai argumen di Popen tidak berfungsi untuk saya.
3 - panggil skrip dan buang perintah echo dari temp.txt di temp_file
Jangan lupa untuk melihat proses dokumen
sumber
subprocess.call
. Proses anak akan memblokir jika menghasilkan output yang cukup ke pipa untuk mengisi buffer pipa OS karena pipa tidak dibaca.Modul subproses adalah modul yang baik untuk meluncurkan subproses. Anda dapat menggunakannya untuk memanggil perintah shell karena ini:
Anda dapat melihat dokumentasinya di sini.
Jika skrip Anda ditulis dalam beberapa file .sh atau string yang panjang, maka Anda dapat menggunakan modul sistem os.system. Ini cukup sederhana dan mudah dipanggil:
Perintah ini akan menjalankan skrip sekali, untuk menyelesaikan, dan memblokir sampai keluar.
sumber
Jika skrip memiliki beberapa argumen
Output akan memberikan kode status. Jika skrip berjalan dengan sukses maka akan menghasilkan 0 bilangan bulat jika tidak nol
Di bawah ini adalah skrip shell test.sh.
sumber
Subproses bagus tetapi beberapa orang mungkin lebih suka scriptine . Scriptine memiliki lebih banyak set metode tingkat tinggi seperti shell.call (args) , path.rename (new_name) dan path.move (src, dst) . Scriptine didasarkan pada subproses dan lainnya.
Dua kelemahan scriptine:
sumber
Saya tahu ini adalah pertanyaan lama, tetapi saya menemukan ini baru-baru ini dan akhirnya salah menilaiku karena Subprocess API diubah sejak python 3.5.
Cara baru untuk menjalankan skrip eksternal adalah dengan
run
fungsi, yang menjalankan perintah yang dijelaskan oleh args. Menunggu perintah selesai, lalu mengembalikan contoh CompletedProcess.sumber
Jika file skrip shell Anda tidak memiliki izin untuk melakukan, lakukan dengan cara berikut.
sumber
Silakan coba kode berikut:
sumber