Output Langsung daripada Perintah Subproses
Dalam Python, anda boleh menangkap output daripada arahan subproses dan pada masa yang sama menghasilkan output penstriman langsung menggunakan pendekatan berikut:
Menggunakan an Iterator
import subprocess import sys p = subprocess.Popen(['command'], stdout=subprocess.PIPE) for line in iter(lambda: p.stdout.readline(1), ''): sys.stdout.buffer.write(line)
Menggunakan FileWriter dan FileReader
import io import time import subprocess import sys log = 'test.log' with io.open(log, 'wb') as writer, io.open(log, 'rb', 1) as reader: p = subprocess.Popen(['command'], stdout=writer) while p.poll() is None: sys.stdout.write(reader.read()) time.sleep(0.5) # Read the remaining sys.stdout.write(reader.read())
Original Code Refactoring
Dalam anda kod asal, anda boleh menangkap output langsung selepas mencipta subproses sebagai berikut:
ret_val = subprocess.Popen(run_command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True ) while not ret_val.poll(): log_file.flush() for line in iter(lambda: ret_val.stdout.readline(1), ''): if line: print(line) log_file.write(line.decode())
Kaedah ini membolehkan anda menangkap kedua-dua strim stdout dan stderr dan mencetak output langsung sambil menulisnya pada fail log secara serentak.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mendapatkan Output Langsung daripada Perintah Subproses dalam Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!