Python和C管道:当我刷新时,Python不会从缓冲区写入



这是大学作业的一部分,但我遇到的问题与作业本身无关。

我有一个C文件,它正在等待来自终端的两个输入,有两个gets(info1),后来有一个gets(info2)。我有一个缓冲的writed,我用它在python中执行以下操作:

sys.stdout.buffer.write("Hello 1".encode("ascii"))
sys.stdout.flush()
sys.stdout.buffer.write("Hello 2".encode("ascii"))
sys.stdout.flush()

然后,我有一个管道,它使用终端将python代码的这些输出发送到C程序的输入端。当我运行该命令时,我可以在打印上看到;你好1";以及";你好2";被发送到CCD_ 3。为什么会发生这种情况?由于如果缓冲区不向终端发送第一个输入,则我刷新缓冲区,因此被C优先的gets(info1)和"0"捕获;你好2";在第二个gets(info2)中被捕获?我甚至在第一次刷新后引入了睡眠功能,但它会睡眠,然后将两个输出都发送到第一个gets(info1)。管道显然可以工作,因为C程序能够从python程序产生的终端获得输出。但是,为什么我只获取第一个函数的输入,即使我在写入第一个字符串后刷新了缓冲区?

当我做时

sys.stdout.buffer.write("Hello 1".encode("ascii"))
sys.stdout.buffer.write("n".encode("ascii"))
sys.stdout.flush()
sys.stdout.buffer.write("Hello 2".encode("ascii"))
sys.stdout.flush()

它正确地发送它。然而,我需要输出非常具体的

我让它工作起来了。请参阅stdout缓冲。我需要给stdout一个换行符,而不是刷新,一切都很好!:(

最新更新