Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimana untuk Menstrim Output Subproses dalam Masa Nyata menggunakan `subprocess.communicate()` Python?
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!