Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimanakah Saya Boleh Menstrim Output Subproses dalam Masa Nyata dalam Python?

Bagaimanakah Saya Boleh Menstrim Output Subproses dalam Masa Nyata dalam Python?

DDD
DDDasal
2024-10-28 20:51:30617semak imbas

How Can I Stream Subprocess Output in Real Time in Python?

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!

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