Python打印内容后覆盖当前行,如何实现单行刷新的进度条功能?
单行刷新进度条实现方法
你当前代码逐行输出的原因是print()函数默认在输出内容末尾添加换行符\n,每次输出都会将光标移动到下一行开头。要实现同一行刷新,只需要修改print的两个参数即可:
- 把
end参数设置为\r(回车符),作用是每次输出后将光标移回当前行的开头,下次输出会直接覆盖当前行已有的内容 - 增加
flush=True参数,强制立刻刷新输出缓冲区,避免内容缓存导致进度不实时更新
修改后的完整代码如下:
import time import random x = range(101) for n in x: timefluc = random.uniform(0, 1.2) time.sleep(timefluc) print("{0}%".format(n), end="\r", flush=True) # 循环结束后主动换行,避免后续输出和100%挤在同一行 print()
补充说明:如果你的使用场景中存在后续输出内容比前面短的情况(比如从100%切换为「执行完成」文本,后者长度更短),可以在输出内容末尾补足够的空格覆盖上一轮的残留内容,比如调整为
print("{0}% ".format(n), end="\r", flush=True)即可。
内容的提问来源于stack exchange,提问作者Felipe hellomods
相关产品推荐
相关产品推荐

