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

如何让tqdm进度条始终显示在终端底部?

解决方案

要让tqdm进度条固定在终端底部,核心是用tqdm.write()替代普通print()输出信息,同时配置tqdm参数确保进度条位置稳定。以下是修改后的代码:

import os
import requests
from tqdm import tqdm

def download_from_dict(path_link_dict, folder):
    counter = 0
    # 固定进度条位置并保持在终端底部
    for path, link, name in tqdm(path_link_dict, position=0, leave=True):
        counter += 1
        file_path = os.path.join(folder, path, name)
        if os.path.isfile(file_path):
            # 用tqdm.write输出,避免打乱进度条位置
            tqdm.write(f'[ Already there! ] {name}')
            continue

        dir_path = os.path.join(folder, path)
        if not os.path.isdir(dir_path):
            os.makedirs(dir_path)

        response = requests.get(link, headers=HEADERS)
        with open(file_path, 'wb') as file:
            file.write(response.content)
        tqdm.write(f'[*] Downloaded {name}')

关键修改说明:

  • 替换print为tqdm.write:tqdm的write方法会自动在进度条上方输出内容,不会触发终端换行导致进度条移位,完美避免了普通print的干扰。
  • tqdm参数配置:
    • position=0:固定进度条在终端的指定行,配合write方法,进度条会始终保持在终端最后一行;
    • leave=True:任务完成后保留进度条在底部(若不需要保留,可改为False)。
  • 路径优化:用os.path.join替代手动拼接路径,避免跨平台路径分隔符出错。

之前尝试无效的原因:

  • 普通print()会强制终端换行,tqdm只能在新行重新绘制进度条,无法固定位置;
  • \r转义符仅能清除当前行内容,若进度条长度超过打印文本,残留字符无法彻底清除,而tqdm.write()会自动处理终端输出位置,从根源解决这个问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 22:42:24