0

我有这个代码

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

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

如果我更换

p.stdin.flush()

p.stdin.close()

它可以工作,但不允许我在之后继续与进程通信

我应该怎么做才能将数据发送到标准输入并从标准输出读取回复并且仍然能够在脚本期间重复该操作?

4

1 回答 1

0

并且子进程正在使用 fprintf(stdout, "%d\n", my_alloc(data));

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

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

你在 Python 端做正确的事,现在你必须在管道的 C 端做同样的事情。Pythonreadline正在阻塞,因为孩子还没有通过管道发送任何东西。

于 2013-04-09T17:32:51.790 回答