Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimana untuk Menstrim Output Subproses dalam Masa Nyata menggunakan `subprocess.communicate()` Python?

Bagaimana untuk Menstrim Output Subproses dalam Masa Nyata menggunakan `subprocess.communicate()` Python?

Patricia Arquette
Patricia Arquetteasal
2025-01-01 00:30:19846semak imbas

How to Stream Subprocess Output in Real-time using Python's `subprocess.communicate()`?

Penstriman Output daripada subprocess.communicate()

Dalam Python, menggunakan subprocess.communicate() untuk membaca stdout daripada proses yang berjalan selama tempoh yang panjang boleh menjadi masalah. Output yang terhasil diterima serentak, menghalang paparan masa nyata.

Untuk mengatasinya, adalah mungkin untuk mencetak setiap baris stdout kerana ia dijana sambil masih memastikan penamatan proses sebelum meneruskan:

Python 2

#!/usr/bin/env python2
from subprocess import Popen, PIPE

p = Popen(["cmd", "arg1"], stdout=PIPE, bufsize=1)
with p.stdout:
    for line in iter(p.stdout.readline, b''):
        print(line)
p.wait()  # Wait for subprocess termination

Python 3

#!/usr/bin/env python3
from subprocess import Popen, PIPE

with Popen(["cmd", "arg1"], stdout=PIPE, bufsize=1, universal_newlines=True) as p:
    for line in p.stdout:
        print(line, end='')

Pendekatan yang diubah suai ini membaca baris secara berterusan semasa ia ditulis, memintas kelewatan penimbal. Proses ini masih mengekalkan tingkah laku menyekatnya, menghentikan pelaksanaan sehingga penamatan.

Atas ialah kandungan terperinci Bagaimana untuk Menstrim Output Subproses dalam Masa Nyata menggunakan `subprocess.communicate()` 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