Menstrim Output Subproses Semasa Proses Berjalan
Dalam Python, kaedah execute() biasanya digunakan untuk melaksanakan arahan luaran. Walau bagaimanapun, secara lalai, ia menunggu proses selesai sebelum mengembalikan gabungan output stdout dan stderr. Ini boleh menjadi tidak diingini untuk proses yang berjalan lama.
Untuk mendayakan pencetakan masa nyata output proses, anda boleh memanfaatkan kuasa iterator dan pilihan universal_newlines Python. Pertimbangkan contoh ini:
<code class="python">from __future__ import print_function # Only Python 2.x import subprocess 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>
Fungsi execute() yang dipertingkat ini melancarkan proses menggunakan Popen, memastikan stdout disalurkan dan baris baharu dikendalikan secara automatik (universal_newlines=True). Ia kemudian menggunakan iterator (iter(popen.stdout.readline, '')) untuk melintasi stdout baris demi baris.
Pendekatan ini membolehkan anda menstrim output daripada proses apabila ia tersedia dalam gelung, membolehkan anda untuk memaparkan kemajuan masa nyata atau bertindak balas kepada output perantaraan dengan sewajarnya.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menstrim Output Subproses dalam Masa Nyata dalam Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!