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

如何阻止下载进度输出时不断换行,使其始终保持在同一行显示

解决Python控制台进度打印换行问题

问题根源:Python内置print()函数默认会在输出内容末尾添加换行符\n,所以每次调用都会新起一行,要实现同屏刷新仅需要调整打印参数即可。

核心修改点

  • 给print函数新增end='\r'参数:用回车符代替默认的换行符,输出后光标回到当前行的行首,下次输出会直接覆盖当前行内容
  • 增加flush=True参数:强制立刻刷新输出缓冲区,避免内容堆积不实时显示
  • 循环结束后额外打印一次空换行,避免后续完成提示内容覆盖最后一条进度信息

修改后的完整代码

import time
import datetime
import libtorrent as lt

# 此处保留你原有初始化逻辑,注意begin变量需提前定义
begin = time.time()

while handle.status().state != lt.torrent_status.seeding:
    s = handle.status()
    state_str = ['queued', 'checking', 'downloading metadata', \
            'downloading', 'finished', 'seeding', 'allocating']
    # 仅修改本行的print参数
    print ('%.2f%% ... (UP: %.1f kb/s DOWN: %.1f kB/s seed: %d) %s ' % \
            (s.progress * 100, s.download_rate / 1000, s.upload_rate / 1000, \
            s.num_peers, state_str[s.state]), end='\r', flush=True)
    time.sleep(5)

# 补加换行,避免后续内容覆盖进度行
print()

end = time.time()
print(handle.name(), "COMPLETE")

print("Elapsed Time: ",int((end-begin)//60),"min :", int((end-begin)%60), "sec")

print(datetime.datetime.now())

兼容优化说明

如果运行环境是老旧的Windows cmd,可能出现旧内容长度比新内容长时残留多余字符的问题,可以在打印内容前加\033[K清除当前行剩余内容,修改后的打印写法如下:

print('\033[K%.2f%% ... (UP: %.1f kb/s DOWN: %.1f kB/s seed: %d) %s ' % \
        (s.progress * 100, s.download_rate / 1000, s.upload_rate / 1000, \
        s.num_peers, state_str[s.state]), end='\r', flush=True)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 22:39:03