Python与子进程通信

时间:2013-04-09 15:20:17

标签: python subprocess stdin

我有这段代码

p.stdin.write('alloc ' + str(size) + '\n' + chr(0x1a))
p.stdin.flush()
stdout = p.stdout.readline()

问题是该脚本一直挂在 readline()

如果我更换

p.stdin.flush()

p.stdin.close()

它有效,但不允许我继续与

之后的流程进行通信

我应该怎么做才能将数据发送到stdin并从stdout读取回复,并且仍然可以在脚本中重复这些内容?

1 个答案:

答案 0 :(得分:0)

  

并且子进程使用fprintf(stdout,“%d \ n”,my_alloc(data))写入;

正如您在父进程中所做的那样,您必须在子进程fflush(stdout)之后fprintf(),因为stdio库将缓冲输出(通常直到有BUFSIZ字节等待写入)。

您可能会看到,当您从shell运行子项时,它看起来像是在每个换行符上发出输出。这是因为stdio库在连接到终端时设置了行缓冲。连接到管道时不会这样做。有关详细信息,请参阅isatty(3)setbuf(3)

你在Python方面做的正确,现在你必须在管道的C端做同样的事情。 Python readline正在阻塞,因为孩子还没有向管道发送任何内容。