https://inasa.dev/blog/rss.xml

Linux | 如何在终端使用Progress bar

2024-08-24

原理:使用 ANSI 转义序列来控制光标位置

import time
import sys

def progress_bar(total):
    for i in range(total + 1):
        percent = (i / total) * 100
        # bar = '█' * (i // 2) + '-' * (total // 2 - i // 2)
        bar = '\u2588' * (i // 2) + '-' * (total // 2 - i // 2)
        sys.stdout.write(f'\rProgress: |{bar}| {percent:.2f}%')
        sys.stdout.flush()
        time.sleep(0.1)  # 模拟工作
    print()

progress_bar(100)
  • \r:这个字符的作用是将光标移动到当前行的开头,而不是换到下一行。这样可以覆盖当前行的内容,实现动态更新。必须写在字符串的最前面,以确保光标移动到当前行的开头。
  • 使用 i // 2 的原因是为了将进度条的长度控制在一个合适的范围内,减少进度条的字符数量,易于阅读