社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Git

终端美化神器,狂揽 50000 GitHub Star!

GitCube • 6 天前 • 19 次点击  

作为一名 Python 开发者,在运行调试脚本的时候,就颇为头疼。

每次终端里输出的都是满屏幕的纯文本黑白日志,想找个关键信息都得眯着眼睛翻半天。

今天跟大家分享一个叫 Rich 的 Python 库,专为解决这个问题而生,在终端上美化日志输出。

Features

通过安装使用这个库,在终端里输出的日志显示变得有颜色、有格式,一下子看着非常舒服。

而且还能直接在终端里显示出带边框的表格,以及任务实时进度条,甚至连代码都能高亮显示。

就像把网页那套排版能力都搬到了命令行里,调试代码的时候效率都高了不少。

终端输出加点料

首先 Rich 最基本的功能就是给终端输出的文字加颜色和样式。

不用写复杂的 ANSI 转义码,直接用类似 BBCode 的标记语法就行。

比如想输出一段加粗的红色文字,写成 [bold red]文字[/bold red] 这样就可以了。

Hello World

更方便的是,它能自动识别 Python 的数据结构然后进行美化输出。

在代码里打印一个字典或者列表的时候,Rich 会自动加上语法高亮和缩进,比原生的 print 好看多了。

同样在调试的时候看变量内容,再也不用对着一坨挤在一起的字符发呆了。

Hello World

表格显示不费劲

如果想在终端里显示表格数据,以前要么自己算空格对齐,要么就凑合着看乱七八糟的输出。

现在 Rich 直接提供了一个 Table 类能自动处理列宽、对齐方式和边框样式。

table

创建一个表格只需要几行代码,定义好列名和每行数据,Rich 会自动渲染成带边框的漂亮表格。

如果终端窗口变小了,它还会智能地调整列宽或者换行,不会让内容跑到屏幕外面去。

table2

进度条让等待不焦虑

如果需要跑时间比较长的任务,那么 Rich 的进度条功能就特别实用。

最简单的用法就是用 track() 函数包一下循环,就能自动显示进度百分比、剩余时间等信息。

甚至还同时支持追踪多个任务,也可以创建多个进度条,每个都独立更新互不干扰。

image-20251003163913094

除了这些功能之外,Rich 还有很多实用且颇具特色的功能,比如下面这些:

语法高亮:能把 Python 代码或其他编程语言的代码高亮显示,支持上百种语言和各种主题配色;

Markdown 渲染:支持在终端上直接渲染 Markdown 文本,正常显示标题、列表、代码块等信息;

错误追踪美化:默认把 Python 的异常信息美化,显示更多上下文代码,颜色高亮关键部分,比原生的 traceback 更好看;

日志增强:log 方法除了打印内容,还会自动显示时间戳、调用位置和局部变量,调试起来信息更加全面。

markdown

安装和使用

安装很简单,只需要执行一行命令就搞定:

pip install rich

最基础的用法就是使用 Rich 的 print 函数替换 Python 内置的 print,就能马上看到效果。

此外 Rich 支持 Linux、macOS 和 Windows,尤其在 Windows Terminal 终端里效果最好。

兼容 Python 3.8 以上版本,同时还能与 Jupyter Notebook 无缝集成使用。

写在最后

如果你经常写命令行工具或者脚本,Rich 确实能让输出看起来专业不少。

特别适合需要展示结构化数据、实时状态或者调试信息的场景。

总的来说,Rich 算是个挺实用的工具,能让终端界面从 “能用” 变成 “好用”。

GitHub 项目地址:https://github.com/Textualize/rich

今天的分享到此结束,感谢大家抽空阅读,我们下期再见,Respect!

往期热文

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/187514