二进制文件期望管道和管道的多个输入由Python编写,为什么两次写入之间需要睡眠?

时间:2019-04-18 06:14:39

标签: python c linux pipe stdin

有一个封闭的Linux二进制文件,可以从stdin中读取输入。我的目标是通过管道使用Python自动发送输入。 我已经创建了命名管道,并使用将stdin重定向到该管道来运行二进制文件。

我的python应用程序写入此管道。我需要将第一个输入数据发送到二进制文件,接收此输入,二进制文件更新其状态,并期待另一个第二个输入数据。因此,我发送第二个输入数据。

f = open(pipe,'w') 
f.write(inputdata1) 
f.flush() 

f.write(inputdata2) 
f.close() 

问题是,当我按上述方式写入管道时,二进制文件在其第一阶段一次获得了inputdata1 + inputdata2。

用gdb投资二进制文件表明,二进制文件通过C库函数read读取用户输入。

我已经尝试了很多,并且有一种解决方法(也许这不是一个解决方案,但是应该如何解决,但我不知道)。发送第一个输入数据后添加睡眠解决了我的问题。 time.sleep(1)

我的第一个问题是time.sleep(1)如何以及为什么使其如我所愿。是否由于time.sleep(1)导致上下文切换的事实?还是我真的需要等待?

我的第二个问题是关于C库函数read的。假设传递的count参数为n,并且管道内少于n个字节,仅此而已。阅读如何以及何时决定返回主叫方?答案可能实际上是我的问题的答案。

0 个答案:

没有答案