我正在尝试使用Python的subprocess.Popen()调用与子进程通信。在我的真实代码中,我正在实现一种IPC类型,因此我想写入一些数据,读取响应,再写入一些数据,再读取响应,以此类推。因此,我无法使用Popen.communicate(),因为它只适用于简单情况。
以下代码显示了我的问题。它甚至无法获得第一个响应,在第一个“Reading result”处挂起。为什么?如何使其按照我的期望工作?
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()
subprocess.Popen(['sed', '-l', 's/a/x/g'], bufsize=0, stdin=PIPE, stdout=PIPE)
- codeskyblue