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

如何让jq实时处理Python脚本输出的每个JSON对象?

解决jq延迟处理Python输出的问题

问题根源是Python的标准输出缓冲机制:当stdout指向管道(比如传给jq)时,Python默认会用「块缓冲」——也就是攒够一定量的数据才会把内容输出到管道里,而不是每执行一次print就立刻输出。所以jq要等Python脚本完全执行完,缓冲里的内容全部刷新出来后,才能开始处理。

下面是几种解决方法:

方法1:修改Python脚本,强制刷新输出

在print语句里加上flush=True参数,让每次print的内容立刻刷到stdout:

import json, time

def new_json(n):
    frame = {
        "Iteration": n,
        "Field0": 0,
        "Field1": 1,
        "Field2": 2
    }
    print(json.dumps(frame), flush=True)  # 新增flush=True

new_json(1)
time.sleep(3)
new_json(2)
time.sleep(3)
new_json(3)

修改后再运行python3 jqtest.py | jq .,就能看到jq每隔3秒输出格式化后的JSON。

方法2:运行Python时禁用缓冲

不用改脚本,直接给python命令加-u参数(unbuffered,无缓冲模式):

python3 -u jqtest.py | jq .

-u会让Python的stdout和stderr都变成无缓冲模式,输出会实时传递给jq。

方法3:通过环境变量禁用缓冲

设置PYTHONUNBUFFERED环境变量,效果和-u参数一致:

PYTHONUNBUFFERED=1 python3 jqtest.py | jq .

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 10:42:47