Apabila menggunakan subproses menggunakan subproses.Popen, kita boleh menyimpan outputnya secara serentak untuk tujuan pengelogan dan memaparkannya secara langsung pada terminal.
Pilihan 1: Menggunakan Iterator
import subprocess import sys with open("test.log", "wb") as f: process = subprocess.Popen(your_command, stdout=subprocess.PIPE) for c in iter(lambda: process.stdout.read(1), b""): sys.stdout.buffer.write(c) f.buffer.write(c)
Pilihan 2: Menggunakan Pembaca dan Penulis
import io import time import subprocess import sys filename = "test.log" with io.open(filename, "wb") as writer, io.open(filename, "rb", 1) as reader: process = subprocess.Popen(command, stdout=writer) while process.poll() is None: sys.stdout.write(reader.read()) time.sleep(0.5) # Read the remaining sys.stdout.write(reader.read())
Pilihan 3: Penyelesaian Tersuai
ret_val = subprocess.Popen(run_command, stdout=log_file, stderr=subprocess.PIPE, shell=True) while not ret_val.poll(): log_file.flush()
Dalam terminal lain, jalankan:
tail -f log.txt
Dengan kaedah ini, anda boleh menangkap output subproses sambil turut memaparkannya secara langsung, memastikan kedua-dua pengelogan dan pemantauan kemajuan.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menangkap dan Memaparkan Output Langsung secara serentak daripada Subproses dalam Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!