来自子进程命令的实时输出
当利用 subprocess.Popen 执行外部命令时,获取实时输出流和输出变得具有挑战性用于日志记录和错误检查的存储。本文探讨了解决此问题的技术,提供了同时实时捕获和显示输出的解决方案,同时保持将其写入日志文件的能力。
解决方案 1:基于迭代器的方法
一种方法涉及从读取函数创建迭代器并将输出写入标准输出和日志file:
import subprocess import sys with open("log.txt", "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)
在Python 3中,将“w”替换为“wb”以支持二进制写入。
解决方案2:读取器和写入器文件方法
或者,可以使用读取器和写入器文件来分离标准输出和文件write:
import io import subprocess import sys filename = "log.txt" 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())
此方法确保数据同时写入标准输出和日志文件,同时提供异步读写的优势。
以上是如何在 Python 中同时捕获和记录子进程的实时输出?的详细内容。更多信息请关注PHP中文网其他相关文章!