子进程命令的实时输出
在 Python 中,您可以捕获子进程命令的输出,并同时使用以下命令生成实时流输出以下方法:
使用迭代器
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)
使用 FileWriter 和 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())
原始代码重构
在你的原始代码,您可以在创建子流程后捕获实时输出:如下:
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())
此方法允许您捕获 stdout 和 stderr 流并打印实时输出,同时将其写入日志文件。
以上是如何从 Python 中的子进程命令获取实时输出?的详细内容。更多信息请关注PHP中文网其他相关文章!