Python脚本通过Taskfile执行时tqdm无法显示实时进度条
Python + tqdm 进度条在Taskfile中无法实时显示的解决办法
问题场景
用tqdm给Python脚本加了实时进度条,直接运行脚本时进度条能正常滚动刷新,但通过Taskfile执行任务时,进度条完全没动静,直到整个循环跑完才突然显示出已完成的进度条。
问题根源
Taskfile默认会对执行命令的输出做缓冲处理,而tqdm是通过持续刷新标准输出来实现实时进度条的,缓冲机制把这些实时输出攒到一起才一次性吐出,就导致进度条没法实时更新。
解决方法
两种简单方案任选其一即可:
方案1:在Taskfile中给Python命令添加无缓冲参数
修改Taskfile的任务配置,调用Python时加上-u参数,强制关闭输出缓冲:
tasks: your-task-name: cmds: - python -u your_script.py
方案2:在Python脚本内手动设置无缓冲输出
在脚本开头添加以下代码,将标准输出配置为行缓冲模式:
import sys sys.stdout.reconfigure(line_buffering=True)
验证效果
修改完成后再通过Taskfile执行任务,tqdm的进度条就能像直接运行脚本一样实时滚动更新了。
内容的提问来源于stack exchange,提问作者Florian
相关产品推荐
相关产品推荐

