Python是一门非常流行的语言,很多人也用它来写一些工具程序,辅助日常工作。说到写程序,大家自然想到的是各种功能强大的图形界面程序,但是写过GUI程序的朋友都知道,GUI程序虽然看起来好看,但是写起来其实是非常复杂的。

但是如果为了省事,写成终端程序,花箱网站将一个黑色的命令行界面又不太好看,有什么办法能够美化终端界面程序呢?其实在Python里还真有这样的类库,能够非常轻松的美化终端程序。今天我就为大家介绍一下这个可以美化终端输出的Python类库——rich。

安装rich

rich和其他Python类库一样,通过pip就可以轻松的安装。

pip install rich安装完毕之后,我们在Python代码中导入rich类库,即可使用它来丰富我们的终端程序输出了。

import rich当然,你也可以先运行一下rich的样例,看看在你的终端上,rich可以渲染成什么样子。

python -m rich为了让rich显示出最好的效果,推荐在Linux系统上运行。在我的Windows Terminal中,粗体、斜体、反色等效果显示不出来,这一点比较可惜。

修改输出样式

在终端输出的时候,我们用rich的print函数取代默认的print函数,即可获得多种多样的终端显示效果。rich的语法类似html标签,我们可以指定粗体、斜体、颜色等样式,另外这里还可以指定emoji短代码,写在两个冒号之间。

from rich import printprint('[yellow italic]地爆天星[/yellow italic] :pray:')显示效果如图所示。

日志输出

rich的彩色富文本输出功能非常适合作为日志输出来使用。rich会自动将Python数据结构中的数据做染色处理。例如下面的代码。

from rich.console import Consoleconsole = Console()test_data = [ {"jsonrpc": "2.0", "method": "sum", "params": [None, 1, 2, 4, False, True], "id": "1",}, {"jsonrpc": "2.0", "method": "notify_hello", "params": [7]}, {"jsonrpc": "2.0", "method": "subtract", "params": [42, 23], "id": "2"},]def test_log(): enabled = False context = { "foo": "bar", } movies = ["Deadpool", "Rise of the Skywalker"] console.log("Hello from", console, "!") console.log(test_data, log_locals=True)test_log()就可以渲染出下面的输出来,如果你有一个程序需要日志输出,可以考虑使用rich让日志输出更加易于阅读和调试。

显示表格

rich还有一个功能就是显示表格,如果你需要结构化显示一些数据,这个功能会帮助到你。

from rich.console import Consolefrom rich.table import Column, Tableconsole = Console()table = Table(show_header=True, header_style="bold magenta")table.add_column("Date", style="dim", width=12)table.add_column("Title")table.add_column("Production Budget", justify="right")table.add_column("Box Office", justify="right")table.add_row( "Dev 20, 2019", "Star Wars: The Rise of Skywalker", "$275,000,000", "$375,126,118")table.add_row( "May 25, 2018", "[red]Solo[/red]: A Star Wars Story", "$275,000,000", "$393,151,347",)table.add_row( "Dec 15, 2017", "Star Wars Ep. VIII: The Last Jedi", "$262,000,000", "[bold]$1,332,539,889[/bold]",)console.print(table)显示的效果如下。另外这个表格很智能,如果终端窗口大小发生改变,表格的大小也会自动适应。

进度条

如果你的程序需要等待一段时间才能完成,花箱可以通过进度条让用户在等待的时候可以查看工作进度。rich也支持进度条功能,而且使用也很方便。

Markdown

rich还可以渲染显示Markdown这一非常流行的文本类型,Markdown在现在也算是很常用的一种文件类型,非常适合对内容格式化要求不高的写作场景。

在rich中使用Markdown也很简单,将文本内容传递给Markdown类的构造函数即可。

from rich.console import Consolefrom rich.markdown import Markdownconsole = Console()with open("README.md") as readme: markdown = Markdown(readme.read())console.print(markdown)渲染出的效果如下图所示。

代码语法高亮

rich还支持代码语法高亮功能,如果你想要在终端中显示带有语法高亮功能的文本,那么rich完全可以满足你。

from rich.console import Consolefrom rich.syntax import Syntaxmy_code = '''def iter_first_last(values: Iterable[T]) -> Iterable[Tuple[bool, bool, T]]: """Iterate and generate a tuple with a flag for first and last value.""" iter_values = iter(values) try: previous_value = next(iter_values) except StopIteration: return first = True for value in iter_values: yield first, False, previous_value first = False previous_value = value yield first, True, previous_value'''syntax = Syntax(my_code, "python", theme="monokai", line_numbers=True)console = Console()console.print(syntax)渲染出的效果如下图所示。