Python 彩色终端
简介
Python程序运行在终端上时,只有背景色和前景色2种颜色,通常是黑底白字
我们可以使用 rich 这个库,让 Python程序有更多的色彩和样式,视觉上更好看。
如果你是在Windows上运行程序,推荐使用 Windows terminal
终端软件, 而不是传统的 Console Host
。 因为前者对终端功能的支持更丰富。
安装 rich
库很简单, 执行 pip install rich
即可
进度条
rich支持彩色进度条。
如果,只有一个任务需要显示进度,可以使用快捷函数 track
比如,
import time
from rich.progress import track
for i in track(range(20), description="进度..."):
time.sleep(0.5) # 模拟执行任务耗费的时间
上面代码,for 循环每执行一次,进度条对应循环的完成次数
比如,上例中一共 循环 20次, 第1次循环完,进度条完成 1/20 第2次循环完,进度条完成 2/20 第3次循环完,进度条完成 3/20
sleep是模拟执行任务耗费的时间,真实有对应的任务,不需要sleep的。
下面是一个批量下载文件的代码示例
import urllib.request
from rich.progress import track
for i in track(range(5,16), description="进度..."):
url = f"https://mirrors.kernel.org/gnu/cpio/cpio-2.{i}.tar.gz"
print(url)
content = urllib.request.urlopen(url).read()
with open(f'd:/tmp/3/cpio-2.{i}.tar.gz','wb') as f:
f.write(content)
如果你不喜欢默认进度条色彩,可以给track函数 指定颜色参数,比如
complete_style 和 finished_style 值分别指定了未完成和结束时的进度条前景色。可以指定一种颜色,支持256种单词表示颜色
如果你同时执行要显示多个任务的进度,需要多个进度条
import time
from rich.progress import Progress
with Progress() as progress:
task1 = progress.add_task("[red]下载...", total=10)
task2 = progress.add_task("[green]处理...", total=10)
task3 = progress.add_task("[yellow]保存...", total=10)
while not progress.finished:
progress.update(task1, advance=0.5)
progress.update(task2, advance=0.2)
progress.update(task3, advance=1)
time.sleep(1)
add_task
方法的 total指明了任务的总体进度值
update
方法 的 advance
参数 表示增加多少完成量,
也可以使用 completed
参数,表示目前该任务总共的完成量。这个值就是进度条已完成部分的长度。
比如
import time
from rich.progress import Progress
with Progress() as progress:
task1 = progress.add_task("[red]下载...", total=10)
task2 = progress.add_task("[green]处理...", total=10)
task3 = progress.add_task("[yellow]保存...", total=10)
t1 = 0
while not progress.finished:
t1 += 2
progress.update(task1, completed=t1)
progress.update(task2, advance=0.2)
progress.update(task3, advance=1)
time.sleep(1)