进程执行过程中连续输出显示
在Python脚本中,我们经常利用子进程来执行外部程序。虽然这是一个强大的功能,但在检索其输出之前等待进程完成可能会令人沮丧。为了解决这个问题,让我们探索一种在进程运行时连续流式传输进程输出的方法。
传统上,我们使用 subprocess.communicate() 来捕获进程完成后的整个输出。然而,这种方法要求在显示任何输出之前完全完成该过程。
为了启用连续输出,我们可以将 iter 函数与 fd.readline() 结合使用。这允许我们迭代进程的标准输出流,捕获可用的行:
import subprocess
def execute(cmd):
popen = subprocess.Popen(cmd, stdout=subprocess.PIPE, universal_newlines=True)
for stdout_line in iter(popen.stdout.readline, ""):
yield stdout_line
popen.stdout.close()
return_code = popen.wait()
if return_code:
raise subprocess.CalledProcessError(return_code, cmd)
在此增强版本中,我们在 stdout 可用时生成每一行。这允许脚本连续显示进程生成的输出。
这是一个说明性示例:
for path in execute(["locate", "a"]):
print(path, end="")
使用这种方法,我们可以连续显示通过“locate”命令找到的与搜索查询“a”匹配的路径,从而提供实时反馈流程的进度。
此技术允许连续输出监控,增强启动外部流程的脚本的交互性和用户体验。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3