一尘不染

快速获取另一个程序的输出作为输入

linux

我以这种方式使用了两个程序:

$ c_program | python_program.py

c_program使用以下命令打印printf()内容,而python_program.py使用以下命令读取内容sys.stdin.readline()

我想使python_program.py在打印时立即处理c_program的输出,以便它可以打印自己的当前输出。不幸的是python_program.py仅在c_program结束后才获得其输入。

我该如何解决?


阅读 531

收藏
2020-06-03

共1个答案

一尘不染

只需将stdout设置为在C程序的开始进行行缓冲(在执行任何输出之前),如下所示:

#include <stdio.h>
setvbuf(stdout, NULL, _IOLBF, 0);

要么

#include <stdio.h>
setlinebuf(stdout);

两种都可以在Linux上运行,但是setvbuf属于C标准,因此它将在更多系统上运行。

默认情况下,stdout将被块缓冲用于管道或文件,或行被缓冲用于终端。由于在这种情况下stdout是管道,因此默认值将为块缓冲。如果是块缓冲的,则当缓冲区已满或调用时,将刷新该缓冲区fflush(stdout)。如果它是行缓冲的,那么它将在每行之后自动刷新。

2020-06-03