Python Rich:美化终端显示效果
Rich库的功能就像它的名字一样,使Python编程更加丰富(rich),
它帮助开发者在控制台(命令行)输出中创建丰富、多彩和具有格式化的文本。
本篇总结了如何使用Rich库让我们的命令行工具更加美观。
1. 安装
通过pip安装:
pip install rich
使用下面的命令验证是否安装成功。
python -m rich
2. 应用示例
Rich的功能很多,下面通过代码示例来演示其中主要的功能。
2.1. 美化 REPL 输出
安装python之后,在命令行输入python,就可以进入python的交互式命令行环境(REPL)。
因为python是解释性语言,所以可以在REPL环境中交互式的运行代码:
注:REPL全称: Read-Eval-Print-Loop (交互式解释器)
默认的REPL是没有颜色的,使用Rich可以美化REPL的显示,获得更好的交互效果。
只需要导入Rich库的pretty即可。
>>> from rich import pretty
>>> pretty.install()
再次运行上面的代码:
不同的数据类型会用不同的颜色来表示。
2.2. 查看对象信息
Rich库中还提供了一个还有用的功能,用来查看python中各个变量或对象的详细信息。
使用前导入 inspect 函数。
>>> from rich import inspect
对于变量,查看其概括信息的方式如下:
>>> inspect(lst_var)

查看其包含的方法:
>>> inspect(lst_var, methods=True)

对于对象,也是一样:
# -*- coding: utf-8 -*-
from rich import inspect
class Sample:
def __init__(self, name, age):
self._name = name
self._age = age
def info(self):
print("姓名: {}, 年龄: {}".format(self.name, self.age))
def set(self, name, age):
self.name = name
self.age = age
def get(self):
return {"name": self.name, "age": self.age}
# 私有函数
def _private(self):
print("这是私有函数")
if __name__ == "__main__":
sa = Sample("harry", 33)
# 显示对象概要信息
inspect(sa)
# 显示对象方法信息
inspect(sa, methods=True)
# 显示对象方法和私有变量,私有函数
inspect(sa, methods=True, private=True)

Rich库的inspect函数让我们在命令行中也可以获得非常好的阅读体验。
2.3. 动态显示内容
动态显示在命令行中一直是个难点,而Rich库能帮助我们很容易的实现状态和进度的动态显示。
比如,如果有多个任务在执行,可以用Rich来动态显示执行的情况。
# -*- coding: utf-8 -*-
from time import sleep
from rich.console import Console
console = Console()
count = 5
tasks = [f"task {n}" for n in range(1, count + 1)]
with console.status("") as status:
num = 1
while tasks:
status.update("[{}/{}] 已经完成".format(num, count))
task = tasks.pop(0)
sleep(1)
num += 1
print("所有任务 全部完成!")

这样就不用打印出很多行的日志信息,而是动态的显示task完成的情况。
还有一个动态的应用是进度条,进度条虽然不能提高程序的性能,
但是它让我们了解到程序大概运行到哪了,能够减少等待的焦虑。
比如,传输大量文件或者下载大文件的过程中,没有进度条的话,常常会担心程序是不是卡住了。
下面是一个模拟文件传输中使用进度条的示例:
# -*- coding: utf-8 -*-
import time
from rich.progress import Progress
# 模拟2个文件,一个是文件名,一个是文件大小
files = [("windows.iso", 24000), ("debian.iso", 17000)]
with Progress() as progress:
tasks = []
for f in files:
task_id = progress.add_task("copy {}".format(f[0]), filename=f[0], start=False)
progress.update(task_id, total=f[1])
progress.start_task(task_id)
# 模拟读取文件,每次读取1024字节
total = f[1]
buffer = 1024
while total > 0:
read_bytes = 0
if total > buffer:
read_bytes = buffer
total -= buffer
else:
read_bytes = total
total = 0
progress.update(task_id, advance=read_bytes)
time.sleep(0.2)
progress.console.log("{} 传输完成!".format(f[0]))
progress.stop_task(task_id)

2.4. 复杂结构显示
Rich库还可以帮助我们在控制台显示一些结构化的内容。
2.4.1. 表格
表格是最常用的一种表现形式,也是最常用的一种展示数据的方式。
# -*- coding: utf-8 -*-
from rich.console import Console
from rich.table import Table
table = Table(title="国内生产总值指数")
table.add_column("年份", justify="left", style="cyan", no_wrap=True)
table.add_column("指标", style="magenta")
table.add_column("数值", justify="right", style="green")
table.add_row("2022年", "国民总收入指数", "4432.1")
table.add_row("2021年", "国民总收入指数", "4319.7")
table.add_row("2020年", "国民总收入指数", "3979.1")
table.add_row("2019年", "国民总收入指数", "3912.1")
console = Console()
console.print(table)

2.4.2. 树形
树形结构也是常用的结构,比如展示文件夹结构:
# -*- coding: utf-8 -*-
from rich.tree import Tree
from rich import print
# 根节点
tree = Tree("/")
# usr 分支
usr = tree.add("usr")
fonts = usr.add("fonts")
bin = usr.add("bin")
lib = usr.add("lib")
# home 分支
home = tree.add("home")
git = home.add("git")
python = home.add("python")
golang = home.add("golang")
# projects 分支
projects = home.add("projects")
samples = projects.add("samples")
work = projects.add("work")
print(tree)

2.5. 文档和代码显示
在IT行业内,markdown文档和代码几乎是绕不开的2个东西。
然而,直接在命令行中原样显示的markdown和代码的话,是很难阅读的。
利用Rich库,可以帮助我们解析markdown的标记,高亮不同编程语言的代码,从而在命令行中获得良好的阅读体验。
# -*- coding: utf-8 -*-
from rich.console import Console
from rich.markdown import Markdown
md_sample = """这是一份[Markdown][1]的语法介绍。
# 段落
一个段落是由一个或多个连续的行构成,段落间靠一个或以上视觉上的空行划分。
这是一个段落。它有两个句子。
这是另一个段落。它也有
两个句子。
## 代码
`print("hello")`
### 列表
* 无序(没有编号的)列表中的一项
* 一个子项,要以一个制表符或者4个空格缩进
* 无序列表中的另一个项
1. 有序(排好序,有编号的)列表中的一项
1. 有序列表中的另一个项
[1]: http://daringfireball.net/projects/markdown/
"""
console = Console()
markdown = Markdown(md_sample)
console.print(markdown)

可以看出,不同的markdown标记会解析成不同的显示效果。
同样,对于不同的代码,也可以高亮显示:
# -*- coding: utf-8 -*-
from rich.console import Console
from rich.syntax import Syntax
py_code = """
def hello(name):
print("hello ", name)
hello("world")
"""
java_code = """
public class HelloWorld
{
public static void main(String[] args)
{
System.out.println("Hello,World!");
}
}
"""
c_code = """
#include <stdio.h>
int main()
{
printf("Hello,World!");
return 1;
}
"""
console = Console()
console.print("========================")
console.print("[green]python 代码")
console.print("========================")
syntax = Syntax(py_code, "python", theme="monokai", line_numbers=True)
console.print(syntax)
console.print("========================")
console.print("[blue]java 代码")
console.print("========================")
syntax = Syntax(java_code, "java", theme="monokai", line_numbers=True)
console.print(syntax)
console.print("========================")
console.print("[red]c 代码")
console.print("========================")
syntax = Syntax(c_code, "c", theme="monokai", line_numbers=True)
console.print(syntax)

这里只演示了3种代码,但是Rich可以支持几乎所有主流的代码。
3. 总结
总的来说,Python Rich库是一个强大的工具,可以让Python开发者在命令行环境中拥有更加丰富和强大的输出能力,使得数据呈现更加直观,增强了代码的可读性和调试效率。
本篇演示了一些常用的功能,关于Rich库的其他功能和每个功能的细节可以参考其官方文档:
https://rich.readthedocs.io/en/latest/
Python Rich:美化终端显示效果的更多相关文章
- “jupyter notebook 不能导入python库但是终端上可以实现”的问题的解决
在使用jupyter notebook的过程中,创建了一个新的环境(anaconda中env)后遇到了这样一个问题,就是: 在jupyter notebook上运行程序,中间发现有一个python库未 ...
- 切换Python环境 linux终端命令行
切换Python环境 conda info -e // 查看有什么环境 source activate env //切换环境 linux终端分屏 terminator https://www.jia ...
- Python rich comparisons 自定义对象比较过程和返回值
Classes wishing to support the rich comparison mechanisms must add one or more of the following new ...
- Linux美化终端
终端美化 不管你是Kali 还是 Centos 还是Ubuntu... 请先用你的安装器安装 zsh 这里以Ubuntu 为例: 终端美化使用的on-my-zsh 首先先介绍一下什么是zsh,zsh ...
- Windows 重装系统,配置 WSL,美化终端,部署 WebDAV 服务器,并备份系统分区
最新博客文章链接 最近发现我 Windows11 上的 WSL 打不开了,一直提示我虚拟化功能没有打开,但我看了下配置,发现虚拟化功能其实是开着的.然后试了各种方法,重装了好几次系统,我一个软件一个软 ...
- archlinux 源配置 桌面美化 终端美化 常用软件 grub配置
简介 本文讲对archlinux进行一些基础系统的配置.常用安装的安装,美化进行配置,先看一下美化后的效果吧 配置pacman和使用AUR(archlinuxcn源) archlinux采用滚动更新的 ...
- Linux美化——终端提示符
1. PS1变量简介[1] PS1是Linux终端用户的一个环境变量,用来说明命令行提示符的设置. 可以使用 man bash命令查看bash手册,找到该变量支持的特殊字符,以及这些特殊字符的意义: ...
- python运行windows终端程序
其实是用python控制windows里的shell 1.windows有PowerShell,可以通过搜索打开,运行python不需要打开shell 2.用python里的subprocess函数, ...
- python print 美化
本来是按照百度搜到的教程来为print输出添加颜色 然后bing了下,已经有封装好的包了,就是python-blessings 效果如图 API网址:https://blessings.readthe ...
- python常用命令—终端安装win32的两种方法
1, pip install pywin32 2, pip install pypiwin32
随机推荐
- 2023是AI爆发的元年,程序员赚钱的机会来了,附49个机会!
以下是程序员利用AI做代码生成的赚钱思路.方案,共49条,按照不同分类列出: 基于自然语言生成的机会: 1. 开发基于AI的自动生成代码软件,应用于网站开发.移动应用开发.家庭自动化.人工智能等各个领 ...
- channel 是怎么走上死锁这条路的
本篇文章接着 hello world 的并发实现一文介绍 Go 的 channel 类型,同时进一步介绍 channel 的几种死锁情况,这些都是代码中很容易遇到的,要重点摘出来讲,防止一不留神程序就 ...
- TOEFL | Reading · 题型总结
目录 直接引用 - 直译题(不要读文章) 直接引用 - why 题(需要细读题干) 直接引用 - 其他(需要细读题干) 理解题(出现最多,需要细读题干) 转义题(不要读题干) 添加句子题(不要读题干) ...
- 25-IP核简介
1.IP IP(Intellectual Property)即知识产权,在半导体产业中讲IP核定义为用于"ASIC或FPGA中的预先设计好的电路功能模块".简言之,这里的IP即电路 ...
- 利用工具查看JMS微服务在线情况,可直接调用远程方法,也可自动生成微服务客户端代码
链接:https://cccscls-my.sharepoint.com/personal/jack_mutc_ca/_layouts/15/onedrive.aspx?id=%2Fpersonal% ...
- JS逆向实战27——pdd的anti_content 分析与逆向
声明 本文章中所有内容仅供学习交流,抓包内容.敏感网址.数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除! 本文已在微信公众号发布 目 ...
- [转帖]Linux内核参数 rp_filter
https://www.cnblogs.com/chenmh/p/6001977.html 简介 rp_filter (Reverse Path Filtering)参数定义了网卡对接收到的数据包进行 ...
- [转帖]十步解析awr报告
http://www.zhaibibei.cn/awr/1.1/ 从这期开始讲解awr报告的部分,首先讲解awr整体的部分 后续会针对不同的点进行讲解 1. 数据库细节 这部分可以看到 数据库的版本 ...
- [转帖]linux之iftop命令
https://rumenz.com/rumenbiji/linux-iftop.html Linux安装iftop > yum install iftop -y > iftop 界面如下 ...
- [转帖]Kafka生产者——重要参数配置
https://www.cnblogs.com/luckyhui28/p/12001798.html 目录 acks max.request.size retries和retry.backoff.ms ...