如何阻止下载进度输出时不断换行,使其始终保持在同一行显示
解决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
相关产品推荐
相关产品推荐

