gpt4 book ai didi

python - 需要避免没有通信的子进程死锁

转载 作者:IT老高 更新时间:2023-10-28 20:34:28 26 4
gpt4 key购买 nike

我需要一个执行命令,该命令会产生大量输出并需要很长时间才能执行(> 30 分钟)。我正在考虑使用 subprocess.Popen 来做到这一点。我需要捕获命令的输出,所以我将 PIPE 传递给 stdout 和 stderr。

使用 Popen.wait() 时出现的死锁问题在很多论坛上都有详细记录,因此 Popen.communicate() 是避免死锁的建议方法。该解决方案的问题在于,communicate() 阻塞,直到命令完成。在执行命令时,我需要打印到达标准输出的所有内容。如果20分钟后没有输出,脚本执行将被终止。

以下是我需要遵守的一些限制:

  • 我的 Python 版本是 2.4.2,无法升级。
  • 如果解决方案仍然是使用 subprocess,我需要将 subprocess.PIPE 传递给所有 std 句柄以避免此错误:http://bugs.python.org/issue1124861

有办法吗?

最佳答案

import os
from subprocess import PIPE, STDOUT, Popen

lines = []
p = Popen(cmd, bufsize=1, stdin=open(os.devnull), stdout=PIPE, stderr=STDOUT)
for line in iter(p.stdout.readline, ''):
print line, # print to stdout immediately
lines.append(line) # capture for later
p.stdout.close()
p.wait()

关于python - 需要避免没有通信的子进程死锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5582933/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com