Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimanakah Saya Boleh Menggunakan Subproses untuk Melaksanakan Skrip Python, Lulus Input dan Menangkap Output?

Bagaimanakah Saya Boleh Menggunakan Subproses untuk Melaksanakan Skrip Python, Lulus Input dan Menangkap Output?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-10-25 18:43:33810semak imbas

How Can I Use Subprocess to Execute Python Scripts, Pass Input, and Capture Output?

Memanfaatkan Subproses untuk Melaksanakan Skrip Python dengan Input dan Menangkap Output

Apabila ditugaskan untuk memanggil skrip Python daripada skrip lain menggunakan modul subproses, anda mungkin menghadapi halangan untuk menghantar input dan mendapatkan output yang dikehendaki dalam pembolehubah. Artikel ini akan menyelidiki penyelesaian kepada cabaran ini, memperkasakan anda untuk memanfaatkan kuasa subproses dengan berkesan.

Untuk menetapkan peringkat, pertimbangkan senario di mana anda mempunyai dua skrip Python: a.py dan b.py. Skrip a.py menggesa pengguna untuk pertanyaan tertentu dan menjana output berformat JSON. B.py bertujuan untuk memanggil a.py, menyediakan input yang diperlukan dan menangkap output.

Kunci untuk mencapai ini terletak pada memanfaatkan kaedah check_output modul subproses. Kaedah ini mengambil sebagai input senarai arahan yang terdiri daripada Python boleh laku dan laluan ke a.py. Ia menyuapkan input yang ditentukan (dalam kes ini, urutan pertanyaan) ke dalam a.py dan menangkap output stdoutnya sebagai rentetan.

Berikut ialah coretan kod contoh yang menunjukkan pendekatan ini:

<code class="python">import os
import sys
from subprocess import check_output

script_path = os.path.join(get_script_dir(), 'a.py')
output = check_output([sys.executable, script_path],
                      input='\n'.join(['query 1', 'query 2']),
                      universal_newlines=True)</code>

Sebagai alternatif, anda boleh memilih pendekatan yang lebih fleksibel dengan mengimport modul a daripada b.py dan memanggil fungsi dalam a.py. Walau bagaimanapun, adalah penting untuk memastikan bahawa a.py menggunakan pengawal if __name__=="__main__" untuk menghalang pelaksanaan kod yang tidak diingini semasa diimport.

Jika pengoptimuman prestasi menjadi kebimbangan utama anda, pertimbangkan untuk menggunakan multiprocessing untuk mengedarkan anda pertanyaan merentasi pelbagai proses. Pendekatan ini amat berfaedah apabila pemprosesan pertanyaan adalah intensif CPU, kerana ia berpotensi meningkatkan masa pelaksanaan.

Coretan kod berikut menggambarkan cara untuk mencapai ini:

<code class="python">from multiprocessing import freeze_support, Pool
import a

if __name__ == "__main__":
   freeze_support()
   pool = Pool() # use all available CPUs
   result = pool.map(a.search, ['query 1', 'query 2'])</code>

Dengan menguasai teknik ini , anda akan dilengkapi dengan baik untuk melaksanakan skrip Python dengan input dengan lancar, menangkap outputnya dan memanfaatkan kuasa subproses untuk keperluan skrip anda.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menggunakan Subproses untuk Melaksanakan Skrip Python, Lulus Input dan Menangkap Output?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn