0

我使用这个 Python 脚本遇到了死锁问题,该脚本解析输出产生的管道两个程序并将结果存储在目录 x 中。

import subprocess as sp
from time import sleep

p1 = sp.Popen(['executable_1'], stdout=sp.PIPE , stderr = sp.STDOUT)
p2 = sp.Popen(['executable_2'], stdin=p1.stdout, stdout = sp.PIPE)

x = my_parser(p2.stdout)

但是,如果我使用一切更改脚本p2 = sp.Popen(executable_2, stdin=p1.stdout, stdout = sp.PIPE, preexec_fn = time.sleep(0.1))似乎工作正常。

解决方案对我来说似乎不是很干净。我知道等待一段时间后,我可以让 p1 将其输出刷新到标准输出,(尽管如果我手动尝试p1.stdout.flush(),有时也会得到 IOError)。

我不能使用communicate(),因为p2 的输出非常大,我想在executable_2仍在执行时处理数据。

在这种情况下,如何在不使用 sleep() 的情况下防止死锁?

4

0 回答 0