gpt4 book ai didi

python - 读取/写入 Popen() 子进程

转载 作者:太空狗 更新时间:2023-10-29 18:30:51 24 4
gpt4 key购买 nike

我正在尝试使用 python subprocess.Popen() 调用与子进程通信。在我的真实代码中,我正在实现一种 IPC,因此我想写入一些数据、读取响应、再写入一些数据、读取响应,等等。因此,我无法使用 Popen.communicate(),否则它在简单情况下效果很好。

此代码显示了我的问题。它甚至从未得到第一个响应,卡在第一个“阅读结果”处。为什么?我怎样才能让这项工作如我所愿?

import subprocess
p = subprocess.Popen(["sed", 's/a/x/g'],
stdout = subprocess.PIPE,
stdin = subprocess.PIPE)

p.stdin.write("abc\n")
print "Reading result:"
print p.stdout.readline()

p.stdin.write("cat\n")
print "Reading result:"
print p.stdout.readline()

最佳答案

sed 的输出被缓冲并且只输出它的数据,直到累积了足够的数据或输入流耗尽并关闭。

试试这个:

import subprocess
p = subprocess.Popen(["sed", 's/a/x/g'],
stdout = subprocess.PIPE,
stdin = subprocess.PIPE)

p.stdin.write("abc\n")
p.stdin.write("cat\n")
p.stdin.close()

print "Reading result 1:"
print p.stdout.readline()

print "Reading result 2:"
print p.stdout.readline()

请注意,这无法可靠地完成,一旦缓冲区已满,写入 stdin 的大量数据就会阻塞。最好的方法是使用 communicate() .

关于python - 读取/写入 Popen() 子进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10363853/

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