Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimana untuk Menstrim Baris Output Subproses mengikut Baris dalam Python?

Bagaimana untuk Menstrim Baris Output Subproses mengikut Baris dalam Python?

DDD
DDDasal
2024-12-13 19:47:18717semak imbas

How to Stream Subprocess Output Line by Line in Python?

Menstrim Baris Output Subproses mengikut Baris

Apabila berurusan dengan utiliti Linux yang bising yang digunakan melalui subproses dalam Python, dengan cekap menangkap kedua-duanya ke fail log dan memaparkannya kepada pengguna boleh mencabar.

Isu:

Pada mulanya, skrip Python cuba menangkap output subproses menggunakan kod berikut:

for line in proc.stdout:
    # Filter output here
    print("test:", line.rstrip())

Walau bagaimanapun, pendekatan ini tidak mempamerkan tingkah laku yang diingini bagi baris output penstriman dengan barisan. Sebaliknya, output hanya muncul selepas jumlah yang besar telah dijana.

Penyelesaian:

Isunya terletak pada penggunaan iterator untuk baris dalam proc.stdout, yang membaca keseluruhan output di muka. Untuk menangani perkara ini, readline() hendaklah digunakan sebaliknya:

# Filter output
import subprocess

proc = subprocess.Popen(['python', 'fake_utility.py'], stdout=subprocess.PIPE)
while True:
    line = proc.stdout.readline()
    if not line:
        break
    # Filter output here
    print("test:", line.rstrip())

Dengan pengubahsuaian ini, output kini distrim baris demi baris seperti yang dikehendaki.

Pertimbangan Penimbalan:

Adalah penting untuk ambil perhatian bahawa subproses mungkin masih menampan output. Untuk mengendalikan perkara ini, kaedah siram atau teknik lain mungkin diperlukan untuk memastikan paparan output tepat pada masanya.

Atas ialah kandungan terperinci Bagaimana untuk Menstrim Baris Output Subproses mengikut Baris 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