And*_*mbu 10 c python linux bash stdio
我有两个以这种方式使用的程序:
$ c_program | python_program.py
Run Code Online (Sandbox Code Playgroud)
c_program使用printf()
和python_program.py读取打印的东西sys.stdin.readline()
我想立即打印python_program.py进程c_program的输出,以便它可以打印自己的当前输出.不幸的是,python_program.py仅在c_program结束后获取其输入.
我怎么解决这个问题?
mar*_*k4o 17
只需将stdout设置为在C程序开始时进行行缓冲(在执行任何输出之前),如下所示:
#include <stdio.h>
setvbuf(stdout, NULL, _IOLBF, 0);
Run Code Online (Sandbox Code Playgroud)
要么
#include <stdio.h>
setlinebuf(stdout);
Run Code Online (Sandbox Code Playgroud)
任何一个都可以在Linux上运行,但它setvbuf
是C标准的一部分,因此它可以在更多系统上运行.
默认情况下,stdout将为管道或文件进行块缓冲,或者为终端缓冲行.由于在这种情况下stdout是管道,因此默认将是块缓冲.如果它是块缓冲的,那么当缓冲区已满或者调用时将刷新缓冲区fflush(stdout)
.如果它是行缓冲的,那么它将在每行之后自动刷新.
归档时间: |
|
查看次数: |
7288 次 |
最近记录: |