有一个封闭的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个字节,仅此而已。阅读如何以及何时决定返回主叫方?答案可能实际上是我的问题的答案。