python实现命令行中的进度条原理

常常在一些安装过程中会看到类似如下的进度条:

Progress: |██████████████------------------------------------| 28.1%

特点是:它在同一行显示,进度不断刷新。
这是如何实现的?探索了一下,运行一个python脚本实现起来还挺容易的,来看一个脚本:

print(f'abc')

很普通的打印一个字符串。
再来:

print(f'abc', end='\r')

运行发现没有任何内容,不对再仔细看看,是打印太快了覆盖了,加个sleep会明显一些:

import time
print(f'abc', end='\r')
time.sleep(1)

运行发现会先打印abc然后被提示符覆盖,原因是'\r'让光标移动到行首,并不会移动到下一行,所以sleep结束后就被命令行提示符覆盖了(更多了解)。

所以实现一个进度条的原理大概是这样的:

import time
print(f'abc', end='\r')
time.sleep(1)
print(f'efg', end="\r")
print()

每一次把上一次的刷新,最后再加一个print换行即可。

参考:
一个手写的进度条示例:https://stackoverflow.com/a/34325723
现成的库:https://github.com/tqdm/tqdm

posted @ 2021-10-31 18:08  ssh_alitheia  阅读(323)  评论(0编辑  收藏  举报