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

如何在Python中同时将tqdm控制台输出记录到文件并显示进度条

实现tqdm进度条同时显示在控制台并记录到文件

以下几种方法可以解决你的需求:

方法一:自定义双输出类

创建一个类模拟tee命令的功能,让tqdm的输出同时流向控制台和文件:

import time
import sys
from tqdm import tqdm

class TeeLogger:
    def __init__(self, file_path):
        self.console = sys.stdout
        self.log_file = open(file_path, 'w')
    
    def write(self, message):
        self.console.write(message)
        self.log_file.write(message)
        self.log_file.flush()  # 实时写入文件,避免缓存
    
    def flush(self):
        self.console.flush()
        self.log_file.flush()

# 使用示例
tee = TeeLogger('/tmp/temp_log.log')
for x in tqdm(range(10), file=tee):
    time.sleep(0.5)

tee.log_file.close()

这个类会将tqdm的每一次输出同步到控制台和日志文件,和控制台的动态进度更新完全对应。

方法二:终端命令行重定向

如果是在终端运行脚本,无需修改代码,直接用tee命令重定向输出:

python your_script.py 2>&1 | tee /tmp/temp_log.log

2>&1会将标准错误(tqdm默认输出到stderr)合并到标准输出,再通过tee同时输出到控制台和日志文件,脚本里保持最初的tqdm代码即可。

方法三:利用tqdm的回调函数

通过callback参数捕获每一次进度更新,同步写入文件:

import time
from tqdm import tqdm

log_file = open('/tmp/temp_log.log', 'w')

def log_progress(bar):
    progress_str = str(bar)
    log_file.write(f"{progress_str}\n")
    log_file.flush()

for x in tqdm(range(10), callback=log_progress):
    time.sleep(0.5)

log_file.close()

每次进度条更新时,回调函数会把当前进度的字符串写入文件,控制台正常显示动态进度条,日志文件会保存每一步的进度记录。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 12:15:40