我以这种方式使用了两个程序:
$ c_program | python_program.py
c_program使用以下命令打印printf()内容,而python_program.py使用以下命令读取内容sys.stdin.readline()
printf()
sys.stdin.readline()
我想使python_program.py在打印时立即处理c_program的输出,以便它可以打印自己的当前输出。不幸的是python_program.py仅在c_program结束后才获得其输入。
我该如何解决?
只需将stdout设置为在C程序的开始进行行缓冲(在执行任何输出之前),如下所示:
#include <stdio.h> setvbuf(stdout, NULL, _IOLBF, 0);
要么
#include <stdio.h> setlinebuf(stdout);
两种都可以在Linux上运行,但是setvbuf属于C标准,因此它将在更多系统上运行。
setvbuf
默认情况下,stdout将被块缓冲用于管道或文件,或行被缓冲用于终端。由于在这种情况下stdout是管道,因此默认值将为块缓冲。如果是块缓冲的,则当缓冲区已满或调用时,将刷新该缓冲区fflush(stdout)。如果它是行缓冲的,那么它将在每行之后自动刷新。
fflush(stdout)