逐行流式传输子进程输出
处理通过 Python 中的子进程调用的嘈杂 Linux 实用程序时,有效地将输出捕获到日志文件并将其显示给用户可能具有挑战性。
问题:
最初,Python 脚本尝试使用以下代码捕获子进程输出:
for line in proc.stdout: # Filter output here print("test:", line.rstrip())
但是,这种方法没有表现出所需的流输出行行为:线。相反,只有在生成大量数据后才会出现输出。
解决方案:
问题在于对 proc.stdout 中的行使用迭代器,它预先读取整个输出。为了解决这个问题,应该使用 readline() 来代替:
# 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())
通过此修改,现在可以根据需要逐行流式传输输出。
缓冲注意事项:
需要注意的是,子进程仍可能缓冲输出。为了解决这个问题,可能需要刷新方法或其他技术来确保及时显示输出。
以上是如何在 Python 中逐行传输子进程输出?的详细内容。更多信息请关注PHP中文网其他相关文章!