Saya ingin memanggil program eksternal dari Python. Saya telah menggunakan keduanya Popen()
dan call()
untuk melakukan itu.
Apa perbedaan keduanya?
Tujuan spesifik saya adalah menjalankan perintah berikut dari Python. Saya tidak yakin bagaimana pengalihan bekerja.
./my_script.sh > output
Saya membaca dokumentasi dan mengatakan itu call()
adalah fungsi kenyamanan atau fungsi pintas. Apakah kita kehilangan daya dengan menggunakan call()
alih-alih Popen()
?
python
subprocess
popen
Varunl
sumber
sumber
call()
tampaknya sangat jelas. Bisakah Anda memberikan penawaran atau tautan sehingga kami tahu apa yang harus difokuskan dalam jawaban?Jawaban:
Ada dua cara untuk melakukan pengalihan. Keduanya berlaku untuk
subprocess.Popen
atausubprocess.call
.Tetapkan argumen kata kunci
shell = True
atauexecutable = /path/to/the/shell
dan tentukan perintah seperti yang Anda miliki di sana.Karena Anda hanya mengarahkan output ke file, atur argumen kata kunci
di mana objek menunjuk ke
output
file.subprocess.Popen
lebih umum daripadasubprocess.call
.Popen
tidak memblokir, memungkinkan Anda untuk berinteraksi dengan proses saat sedang berjalan, atau melanjutkan dengan hal lain di program Python Anda. Panggilan untukPopen
mengembalikanPopen
objek.call
tidak menghalangi. Meskipun mendukung semua argumen yang sama denganPopen
konstruktor, sehingga Anda masih dapat mengatur output proses, variabel lingkungan, dll., Skrip Anda menunggu program selesai, dancall
mengembalikan kode yang mewakili status keluar proses.pada dasarnya sama dengan menelepon
call
hanyalah fungsi kenyamanan. Implementasinya di CPython ada di subprocess.py :Seperti yang Anda lihat, ini adalah pembungkus tipis
Popen
.sumber
Jawaban lainnya sangat lengkap, tetapi ini adalah aturan praktis:
call
sedang memblokir:Popen
tidak memblokir:sumber