终端高亮和色彩渲染库——Rich
现在基于Python来做一些运维工具是一个很常见的选择,尤其开发一些终端小工具。为了改变终端黑白两色的世界,需要给你的小工具做一些色彩和高亮的渲染。虫虫今天就给大家介绍一个用于终端色彩渲染的Python库Rich,和名字暗示的一样,该库可以用来渲染终端色彩,以呈现丰富的文本和漂亮的格式。
概述
Rich提供API可以很容易地为终端输出添加颜色和样式。 Rich支持渲染漂表格、进度条、markdown、语法突出显示的源代码、回溯等等,并且开箱即用。
兼容性
Rich可以跨平台使用,可用于Linux、OSX以及Windows。真彩/表情符号适用于新的Windows 终端,经典终端仅限于16种颜色。
Rich需要Python 3.6.1或更高版本。
Rich可Jupyter Notebook 配合使用而无需额外配置。
安装
可以使用pip或者PyPI包管理器安装Rich:
python -m pip install rich
安装成功后,可以使用以下命令在终端上测试Rich输出:
python -m rich
基本用法
为了要轻松地将rich添加到的应用程序,使用以导入rich的print方法,该方法与内置Python函数具有相同的签名。
from rich import print
print ( "Hello, [bold magenta]World[/bold magenta]!" , ":vampire:" , locals ())
REPL
Rich可以安装在Python REPL中,这样任何数据结构都可以被渲染高亮彩色打印和突出显示。
>>> from rich import pretty
>>> pretty.install()
Console
要更好地控制终端内容,需要导入并构造一个Consol对象。
from rich.console import Console
console = Console()
Console对象有一个和内置函数print有相似的接口的方法:
console.print("Hello", "World!")
该语句将打印 "Hello World!"到终端。请注意,与内置print功能,Rich将自动换行以适应终端宽度。
有几种方法可以为输出添加颜色和样式。比如可以通过添加style关键字参数:
控制台 。
print ( "Hello" , "World!" , style = "bold red" )
输出类似于以下内容:
这对于一次设置一行文本的渲染,用style样式就很好。
为了更细粒度的样式,Rich 呈现了一个特殊的标记,它的语法类似于bbcode ,举例如下:
console.print("Where there is a [bold cyan]Will[/bold cyan] there [u]is[/u] a [i]way[/i].")
可以使用Console对象以最小的努力生成复杂的输出。
Inspect
Rich 有一个Inspect函数,它可以生成任何 Python 对象的报告,例如类、实例或内置对象的渲染。
>>> my_list = ["foo", "bar"]
>>> from rich import inspect
>>> inspect(my_list, methods=True)
进阶
Rich包含许多可渲染对象可用于在 终端中创建优雅输出并帮助调试代码。
Log
Console 对象有一个log()具有类似print()接口的方法,但也会呈现当前时间的列以及进行调用的文件和行。默认情况下,Rich 将为 Python 结构和 repr 字符串进行语法突出显示。 如果记录一个集合(即一个字典或一个列表),Rich 会漂亮地打印它,以便它适合可用空间。
还可以使用内置的Handler类 对Python日志记录模块的输出进行格式化和着色。
表格
为灵活呈现表格,可以使用unicode、框字符、边框、样式、单元格对齐等有多种格式选项。
进度条
Rich可以渲染多个不闪烁的进度条来跟踪长时间运行的任务。
位置
对于难以计算进度的情况,可以使用status方法,该方法将显示“微调器”动画和消息。动画不会阻止正常使用控制台。
对cli-spinners,可以通过指定spinner范围。运行以下命令以查看可用值,呈现出动态效果图:
python -m rich.spinner
树
Rich可以树的方式用引导线,显示文件结构或任何其他分层数据。
python -m rich.tree
框格
Rich 可以将内容呈现在Columns具有相同或最佳宽度,下面是(MacOS / Linux)的一个非常基本的克隆ls在列中显示目录列表的命令:
MD文本
Rich可以渲染markdown并合理地将格式转换到终端。
from rich.console import Console
from rich.markdown import Markdown
console = Console()
with open("README.md") as readme:
markdown = Markdown(readme.read())
console.print(markdown)
语法高亮
Rich 使用 pygments 库来实现语法高亮。用法类似于渲染markdown; 构建一个Syntax对象并将其打印到控制台。
其渲染效果如下:
追溯
Rich可以渲染回溯,它比标准的Python回溯更易于阅读并显示更多代码。可以将Rich设置为默认的回溯处理程序,这样所有未捕获的异常都将由Rich呈现。
总结
本文中我们介绍一个Python下终端渲染工具Rich,可以帮忙讲我们的终端呈现出多彩多姿,当然这样的工具有很多。抛砖引玉,如果你也在使用类似的工具,请不吝回复介绍给大家。