Rich:Python开发者的完美终端工具!

前言

最近发现了一款非常强大的python第三方库——Rich
这款库主要用于终端打印


一、Rich是什么?

Rich是一个Python库,用于将丰富的文本(带有颜色和样式)写入终端,并用于显示高级内容,例如表格。
使用Rich使您的命令行应用程序更具视觉吸引力,并以更具可读性的方式呈现数据。Rich还可以通过漂亮的打印和语法突出显示数据结构来作为有用的调试辅助工具。
<官方文档>


二、安装与导入Rich

1.Rich安装

直接pip就好了

pip install Rich
1

2.导入rich库(快速使用打印功能)

代码如下(示例):

from rich import print as rprint
rprint(locals())
12

以上代码将rich库的基础打印函数导入,并使用其打印了一个字典
img
与print()函数具有类似作用的还有log()和rule()函数,但是我们在这一节不去详细介绍它们,因为直接导入函数再进行使用并不是官方推荐的用法。
以上面的例子为例,其理想打印结果应该是
img
这是因为前者是在pycharm中打印的,后者是在windows Powershell,前者的终端不支持默认颜色空间,所以打印出来的内容没有颜色。


三、Console类的使用

为了完全控制终端格式,Rich提供了一个Console类。
在下文中,‘可打印的’,‘可渲染的’皆指Console实例可以打印的对象


1、官方推荐的构造与导入方式

大多数应用程序将需要一个Console实例,因此您可能需要将其当做模块级别或作为顶级对象来创建。例如,您可以在项目中添加一个名为“ rich_console.py”的文件:

from rich.console import Console
console = Console()
12

然后,您可以从项目的任何位置导入控制台,如下所示:

from rich_console import console
1

2、Console的构造方法

在构建Console对象时,你可以选择以下参数:

可选参数 含义
size 是终端的当前尺寸(尽量不要手动设置它,因为它是自动的)
encoding 编码方式
color_system 颜色空间
file 当你设置了这个参数,Console的打印将被重定向到指定文件

可选的颜色空间:
img


3、Console的常用方法

使用方法:
在此之前,让我们先来创建一个实例console

console = Console(color_system='256', style=None)
1

>使用console.print()来进行基础打印

使用方法:

console.print([1, 2, 3])
console.print("[blue underline]Looks like a link")
console.print(locals())
console.print("FOO", style="white on blue")
1234

打印的结果:
img
[style]中的参数和style参数的功能相同,他们的具体格式我会在下面给出


>使用console.rule()来打印带标题的分隔线

官方描述:绘制一条带有可选标题的水平线,这是将终端输出分成多个部分的好方法。
使用方法:

console.rule("[bold red]Chapter 2")
console.rule("[bold red]Chapter 2", align='left')
12

打印的结果如下:
img
你可以设置align参数来设置标题的对齐,默认为 ‘center’


>使用console.log()来打印日志

使用方法:

console.log('hello world')
1

打印结果:
img


>console.out()低级打印

它类似于python的源生print(),不能格式化打印高级数据类型


>console.input()输入

这个我没有详细看,有兴趣的可以翻阅官方文档


>文本对齐

print(), log()方法支持justify参数,如果你设置了这个参数,
其必须为:“default”, “left”, “right”, “center”, “full”,它可以设置打印的文本使其对齐

style = 'bold white on blue' 
console.print('Rich', style=style) 
console.print('Rich', style=style, justify='left') 
console.print('Rich', style=style, justify='center') 
console.print('Rich', style=style, justify='right') 
12345

img


>console.status()状态显示

这个方法将返回一个上下文管理器,
该上下文管理器将使用动画显示代码块的运行状态。
你可以在控制台输入以下命令来观赏其功能:

python -m rich.status
1

使用方法:

with console.status("[red]Working...[/]"):
    for i in range(10):
        time.sleep(0.2)
123

运行结果:
img
在运行with包围的代码时,控制台会为其显示一个动画
你可以设置spinner参数来设置显示的动画
使用以下命令来观看所有可选的spinner

python -m rich.spinner
1

4、Console小结与文字样式简介

除了在字符串中使用 [style] str [/] 来标记要渲染的字符串的样式之外,你还可以使用style参数来设置其样式 ,它们是完全等价的
例如:

console.print('[magenta]Hello[/]') 
1

等价于:

console.print('Hello', style='magenta') 
1

>style的颜色关键字的使用

八位颜色:

 style='color(n)' # 0<=n<=255 
1

十六进制颜色与RGB颜色,这需要你的console的颜色空间支持:

style='#af00ff'
1
style='rgb(175,0,255)' 
1

你还可以在style的颜色关键字前加上on来设置背景颜色,例如:

style='red on white'
1

这将生成红字白底的文本

>style的样式关键字的使用


您可以通过添加以下一个或多个单词来设置样式属性:

关键字 含义
‘bold’或’b’ 粗体字
‘blink’ 用于闪烁的文本(请谨慎使用)
‘blink2’ 用于快速闪烁的文本(大多数终端不支持)
‘conceal’ 用于隐藏的文本(大多数终端不支持)
‘italic’或’i’ 斜体文本(Windows不支持)
‘reverse’或’r’ 用于前景和背景颜色反转的文本
‘strike’或’s’ 带有删除线的文字
‘underline’或’u’ 带下划线的文字

!!你可以将所有样式混用!! 例如:

style='blink bold red underline on white' 
1

你同样可以生成Style对象来代替style字符串,详细请见官方文档


四、Rich的其他功能

除了打印功能外,Rich也具有很多其他强大的功能,例如生成面板和表单,生成进度条等


1、进度条生成

>使用rich.progress.track()自动生成并刷新进度条

该函数可以简单快速地生成一个进度条,只需要你在原本的迭代器上做很小的改动
使用方法:

from rich.progress import track
for i in track(range(10), description='Processing...'):
    time.sleep(1)
123

运行结果:

img
它非常的简单易用,只需要在你原本的迭代器上套一层track()就能使用!!


>使用rich.progress.Progress的实例来手动刷新多条进度

使用方法:

from rich.progress import Progress with Progress() as progress: task1 = progress.add_task('[red]Downloading...', total=1000) task2 = progress.add_task('[green]Processing...', total=1000) task3 = progress.add_task('[cyan]Cooking...', total=1000) while not progress.finished: progress.update(task1, advance=5) progress.update(task2, advance=3) progress.update(task3, advance=9) time.sleep(0.02)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

使用progress.add_task()方法来手动创建一根进度条,并使用progress.update()方法来更新它,
total意指该进度条的总长度,advance意指进度条的增长长度


2、面板

rich.panel.Panel的实例为一个被线条包围的可渲染对象
使用方法:

from rich.panel import Panel \n
    console.print(Panel('[blue]This is a panel[/]'))
12

运行结果
img
你可以通过box参数来设置面板线条的类型


3、表单

rich.table.Table()的实例为一个具有行和列的可渲染对象
使用方法:

from rich.table import Table
table = Table()
table.add_column('[red]test')
table.add_column('[red]test2')
table.add_row('[red]this is a table', '[yellow]this is a table')
table.add_row('[red]hello', '[yellow]world')
console.print(table)
1234567

运行结果

img
类似于面板,表单同样可以设置box参数来改变它的线条类型


4、实时显示

rich.live.Live的实例用于连续刷新显示一个可渲染对象,例如,你向Table对象中写入的新的行,你不需要再次打印它,它的内容将实时显示在终端上。
注意:Live的实例内部将自动创建一个console对象,你也可以在构造Live实例时传入它

from rich.live import Live
from rich.table import Table
table = Table()
table.add_column('test')
with Live(table, refresh_per_second=4) as live:
    for row in range(12):
        time.sleep(0.4)
        table.add_row('yes')
        live.console.log('log')
123456789

运行结果:
img

img


五、自己写的文档

我自己整理了一下文档,并写好了py文件名为rich_console.py
img
直接导入就能用了!鼠标放上去就能看见所有的使用方法,再也不怕记不住了!
img
并且写好了一个配套的测试文件test.py
img
https://download.csdn.net/download/qq_43954124/14752622 <在这里下载

posted @ 2022-10-19 14:47  hanfe1  阅读(1165)  评论(0)    收藏  举报