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!