我有这段代码
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读取回复,并且仍然可以在脚本中重复这些内容?
答案 0 :(得分:0)
并且子进程使用fprintf(stdout,“%d \ n”,my_alloc(data))写入;
正如您在父进程中所做的那样,您必须在子进程fflush(stdout)
之后fprintf()
,因为stdio库将缓冲输出(通常直到有BUFSIZ字节等待写入)。
您可能会看到,当您从shell运行子项时,它看起来像是在每个换行符上发出输出。这是因为stdio库在连接到终端时设置了行缓冲。连接到管道时不会这样做。有关详细信息,请参阅isatty(3)
和setbuf(3)
。
你在Python方面做的正确,现在你必须在管道的C端做同样的事情。 Python readline
正在阻塞,因为孩子还没有向管道发送任何内容。