Output Masa Nyata daripada Subproses
Dalam Python, modul subproses menyediakan cara yang mudah untuk melaksanakan program luaran. Walau bagaimanapun, secara lalai, ia menangkap semua output program dan mengembalikannya setelah proses selesai. Ini boleh menjadi masalah untuk proses yang berjalan lama.
Memperkenalkan Undian Output Berulang
Untuk menangani perkara ini, anda boleh memanfaatkan fungsi iter() untuk mendapatkan keluaran baris demi baris sebagai arahan menjananya. Berikut ialah versi diubah suai bagi fungsi execute() anda yang melaksanakan pendekatan ini:
<code class="python">def execute(cmd): popen = subprocess.Popen(cmd, stdout=subprocess.PIPE, universal_newlines=True) for stdout_line in iter(popen.stdout.readline, ""): yield stdout_line popen.stdout.close() return_code = popen.wait() if return_code: raise subprocess.CalledProcessError(return_code, cmd)</code>
Contoh Penggunaan
Anda kini boleh mengulangi output proses kerana ia menjadi tersedia:
<code class="python">for path in execute(["locate", "a"]): print(path, end="")</code>
Contoh ini akan terus mencetak output arahan locate semasa ia mencari fail.
Selang Pengundian
Walaupun kaedah ini menyediakan output masa nyata, selang pengundian boleh memberi kesan kepada prestasi. Parameter universal_newlines memastikan anda mendapat baris teks dan bukannya bait, yang memerlukan overhed tambahan. Untuk mengoptimumkan pengundian, anda boleh mengurangkan kekerapan output proses diperiksa.
Atas ialah kandungan terperinci Bagaimana untuk Mendapatkan Output Masa Nyata daripada Subproses dalam Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!