Python3 实现命令行动态进度条

1. 原理

在动画里连续的画面是由一帧帧单独的图片构成的。动态进度条即是如此,在同一行内连续播放不同的图案。 我们首先来使用 print() 函数来制作一个简易的进度条:

import time
import sys
n = 10
for i in range(n):
    time.sleep(0.3)
    sys.stdout.write('\r')
    sys.stdout.write(str(i)*(i))
    sys.stdout.flush()
sys.stdout.write('\n')
  • 因为 python 中的标准输入输出默认是使用行缓冲的。而对于行缓冲来说,缓冲区读取到换行符 \n 或回车符 \r 时刷新缓冲区。所以我们需要使用 sys.stdout.flush() 函数在每次迭代时手动刷新缓冲区。
  • 需要使用一个字符:回车符 \r。回车符的作用是回到行首,这时我们再输出字符将会覆盖同一行内已存在的字符。

2. 项目结构

  • prog_class.py 文件定义了类 Prog
  • progbar.py 定义了类 ProgBar
  • progpercent.py 定义了类 ProgPercent
  • generator_factory.py 定义了函数 prog_percent()prog_bar()

  • ProgBarprog_bar() 是用来提供进度条的
  • ProgPercentprog_percent() 则提供进度百分比指示器。

3. 实现源码

4. 效果展示