You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现C程序逐次输出并让Python实时读取其输出?

解决C程序实时输出与Python实时读取的问题

你的问题核心在于C标准输出的缓冲机制:当stdout指向管道(而非终端)时,printf默认采用全缓冲模式,只有缓冲区填满或程序退出时才会一次性输出所有内容,导致Python无法实时读取。

下面提供两种可行的修改方案:

方案1:修改C代码,手动刷新缓冲区

在每次printf后调用fflush(stdout)强制刷新输出缓冲区,确保内容实时输出:

修改后的test.c:

#include <stdio.h>
#include <unistd.h>

int main(){
    int i;
    for(i = 1; i <= 10; i++){
      sleep(5);
      printf("%d ",i);
      fflush(stdout); // 强制刷新缓冲区,立即输出内容
    }
    return 0;
}

编译命令保持不变:

gcc test.c -o test

方案2:不修改C代码,通过运行时参数禁用缓冲

如果你不想改动C代码,可以使用stdbuf工具修改程序的输出缓冲模式,修改Python脚本中的命令:

修改后的test.py:

#!/usr/bin/env python3

from subprocess import Popen, PIPE, CalledProcessError

cmd = "stdbuf -o0 ./test" # -o0 表示标准输出无缓冲

print("Running..")
with Popen(cmd, shell=True, stdout=PIPE, bufsize=1, universal_newlines=True) as p:
    for line in p.stdout:
        print(line, end='')

if p.returncode != 0:
    raise CalledProcessError(p.returncode, p.args)

验证效果

无论采用哪种方案,运行Python脚本后,都会每隔5秒看到一个数字被实时打印出来,实现你想要的逐次输出与实时读取的效果。

内容的提问来源于stack exchange,提问作者Evan Krause

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 21:06:15