当前位置: 首页 > news >正文

【教程】增强版 print 函数,支持彩色与样式化终端输出

转载请注明出处:小锋学长生活大爆炸[xfxuezhagn.cn]

如果本文帮助到了你,欢迎[点赞、收藏、关注]哦~

目录

实现代码

进阶补丁

pip安装

现有的库


为了方便大家安装,我已经上传到了pypi,因此可以直接通过pip安装了:

pip install myprintx

目前只支持颜色输出,后续会陆续添加更多功能。

        代码中在输出log时候非常需要通过不同颜色来进行强提醒,比如warn用红色。不想用logging模块,普通的print输出又都是一个颜色,非常不好区分。因此对print进行修改,来支持不同颜色。

实现代码

def print(*args,sep=' ',end='\n',file=None,flush=False,fg_color=None,   # 前景色(文本颜色)bg_color=None,   # 背景色style=None       # 文本样式:'bold'、'underline'、'italic'
):"""增强版 print() 函数 —— 支持彩色与样式化终端输出=======================================================✅ 功能说明:该函数在保留 Python 内置 print() 所有功能的基础上,增加了文本颜色与样式控制能力,可在终端中输出彩色文本,适合日志、调试信息、高亮提示等场景。🧩 参数说明:*args : 任意数量的输出对象,与原生 print 相同。sep : str, 可选(默认 ' ')各输出项之间的分隔符。end : str, 可选(默认 '\n')输出结束时添加的字符。file : 文件对象, 可选指定输出目标(默认 sys.stdout)。flush : bool, 可选(默认 False)是否强制刷新输出缓冲区。fg_color : str, 可选前景色(文本颜色)。可选值:['black', 'red', 'green', 'yellow', 'blue', 'purple', 'cyan', 'white']示例:fg_color='red'bg_color : str, 可选背景色。可选值同上,可带或不带前缀 'bg_'。示例:bg_color='yellow' 或 bg_color='bg_yellow'style : str, 可选文本样式。可选值:- 'bold':加粗- 'underline':下划线- 'italic':斜体(部分终端支持)🎨 示例用法:print("普通文本")print("红色文字", fg_color="red")print("白字红底", fg_color="white", bg_color="red")print("加粗蓝字", fg_color="blue", style="bold")print("下划线绿色文字", fg_color="green", style="underline")print("多参数输出", 123, True, fg_color="cyan", style="italic")⚙️ 兼容性:- macOS / Linux 终端:原生支持 ANSI 转义序列- Windows 10+:自动启用颜色支持- 写入文件时:颜色代码不会影响文本内容🧠 原理说明:通过 ANSI 转义序列控制输出颜色,格式为:\033[样式;前景色;背景色m 内容 \033[0m其中 \033[0m 用于重置颜色,避免污染后续输出。"""import sys, os# Windows 环境兼容:启用 ANSI 转义序列支持if sys.platform == "win32":os.system("")  # 启用颜色支持,对旧版 Windows 也安全# ANSI 颜色映射表color_map = {# 前景色'black': 30, 'red': 31, 'green': 32, 'yellow': 33,'blue': 34, 'purple': 35, 'cyan': 36, 'white': 37,# 背景色'bg_black': 40, 'bg_red': 41, 'bg_green': 42, 'bg_yellow': 43,'bg_blue': 44, 'bg_purple': 45, 'bg_cyan': 46, 'bg_white': 47}# 文本样式映射表style_map = {'bold': 1,'underline': 4,'italic': 3}# 构建颜色控制码列表codes = []# 样式控制if style and style in style_map:codes.append(str(style_map[style]))# 前景色控制if fg_color:fg_key = fg_color if fg_color.startswith("fg_") else fg_colorif fg_key in color_map:codes.append(str(color_map[fg_key]))elif f"fg_{fg_key}" in color_map:codes.append(str(color_map[f"fg_{fg_key}"]))# 背景色控制if bg_color:bg_key = bg_color if bg_color.startswith("bg_") else f"bg_{bg_color}"if bg_key in color_map:codes.append(str(color_map[bg_key]))# 构建 ANSI 转义序列prefix = f"\033[{';'.join(codes)}m" if codes else ''suffix = "\033[0m" if codes else ''# 拼接输出文本text = sep.join(map(str, args))output = f"{prefix}{text}{suffix}"# 调用原生 print,避免递归__builtins__.print(output, sep=sep, end=end, file=file or sys.stdout, flush=flush)

使用示例:

print("正常输出")
print("红色文字", fg_color="red")
print("白字红底", fg_color="white", bg_color="red")
print("加粗蓝字", fg_color="blue", style="bold")
print("下划线绿色文字", fg_color="green", style="underline")
print("多参数输出", 123, True, fg_color="cyan", style="italic")

进阶补丁

        不改原代码、不每次 import,而是让这个增强版函数直接替代内置 print(),也就是打补丁。Python 内置的 print() 实际上定义在模块 builtins(Python 3)中。因此只要执行以下代码,就可以在全局范围内替换原生 print。之后,无论哪个模块执行 print,都会自动使用增强版版本:

import builtins
builtins.print = <增强版print函数>
import sys, os, builtinsdef color_print(*args,sep=' ',end='\n',file=None,flush=False,fg_color=None,   # 前景色bg_color=None,   # 背景色style=None       # 样式:bold / underline / italic
):# 兼容 Windows 终端if sys.platform == "win32":os.system("")color_map = {# 前景色'black': 30, 'red': 31, 'green': 32, 'yellow': 33,'blue': 34, 'purple': 35, 'cyan': 36, 'white': 37,# 背景色'bg_black': 40, 'bg_red': 41, 'bg_green': 42, 'bg_yellow': 43,'bg_blue': 44, 'bg_purple': 45, 'bg_cyan': 46, 'bg_white': 47}style_map = {'bold': 1,'underline': 4,'italic': 3}codes = []if style and style in style_map:codes.append(str(style_map[style]))if fg_color:if fg_color in color_map:codes.append(str(color_map[fg_color]))elif f"fg_{fg_color}" in color_map:codes.append(str(color_map[f"fg_{fg_color}"]))if bg_color:bg_key = bg_color if bg_color.startswith("bg_") else f"bg_{bg_color}"if bg_key in color_map:codes.append(str(color_map[bg_key]))prefix = f"\033[{';'.join(codes)}m" if codes else ''suffix = "\033[0m" if codes else ''text = sep.join(map(str, args))output = f"{prefix}{text}{suffix}"builtins.__orig_print__(output, sep=sep, end=end, file=file or sys.stdout, flush=flush)# -----------------------------
# 🧩 对 print 打补丁(Monkey Patch)
# -----------------------------
if not hasattr(builtins, "__orig_print__"):builtins.__orig_print__ = builtins.print  # 备份原始 print
builtins.print = color_print

把上面代码保存为一个模块,然后在程序入口处只需要执行一次import上述文件,从此以后,全局 print就会自动变彩色,不需要每次都import。

pip安装

为了方便大家安装,我已经上传到了pypi,因此可以直接通过pip安装了:

https://pypi.org/project/myprintx/1.0.0/

pip install myprintx

使用示例:

现有的库

Python 生态里已经有一些成熟、稳定的库,能让 print() 直接输出彩色文本。

1. colorama

安装:

pip install colorama

示例:

from colorama import Fore, Back, Style, initinit(autoreset=True)  # 自动重置颜色(避免污染后续输出)print(Fore.RED + '红色文字')
print(Fore.GREEN + '绿色文字')
print(Back.YELLOW + Fore.BLACK + '黑字黄底')
print(Style.BRIGHT + Fore.CYAN + '加粗青色')

特点:

  • 标准、轻量、跨平台(Windows 自动启用 ANSI 模式)

  • 被许多大型项目使用(如 pytestpip 自身)

  • 可与 logging 模块结合

缺点:

  • 不直接扩展 print(),而是使用前缀(Fore.RED)样式。

2. termcolor

安装:

pip install termcolor

示例:

from termcolor import coloredprint(colored("成功!", "green"))
print(colored("错误!", "red", attrs=["bold"]))
print(colored("警告!", "yellow", "on_red"))

特点:

  • API 简洁 (colored(text, color, on_color, attrs))

  • 支持多种样式:bold, underline, reverse

  • 生成的是字符串,可以和 f-string 混用

缺点:

  • Windows 早期 CMD 不支持,需要配合 colorama 初始化

3. rich

安装:

pip install rich

示例:

from rich import printprint("[bold red]错误:[/bold red] 无法连接服务器")
print("[green]成功![/green] 已完成操作。")
print("[yellow on blue]提示信息[/yellow on blue]")

特点:

  • 自带彩色 print()(无需 monkey patch)

  • 支持 Markdown、表格、进度条、日志、追踪栈等

  • 高性能终端渲染引擎

  • 推荐用于:命令行工具、日志系统、美观的控制台输出。

缺点:

  • 稍大(几 MB),功能远超“仅彩色输出”需求。

http://www.dtcms.com/a/482618.html

相关文章:

  • Python下载实战技巧技术文章大纲
  • TCP 拆包现象解决方案(一)
  • 陕西省城乡建设学校网站网页设计图片加载不出来
  • 商业智能BI与业务结构分析
  • 视频融合平台EasyCVR助力构建智慧园区的“视觉中枢”与“智能引擎”
  • 基于python+Java的二手车与奔驰销量数据可视化平台
  • 网站返回顶部怎么做制作企业网站页面实训报告
  • 基于ArcGIS的作物适宜区分析案例 | 当GIS化身农科月老
  • 贵阳网站建设开发开发区二手房
  • SpringCloud中的网关(Gateway)的作用是什么?
  • 联想笔记本电脑Y7000P更换电池后引发CPU锁0.78GHz问题修复记录
  • 大良网站建设中国企业网控股有限公司
  • 德州 网站建设购物车 信息技术分院网站后台设计课题组
  • 用iis 匿名访问windows 上的sql server数据库
  • Eclipse MyEclipse MyEclipseCI 安装SVN插件及使用说明
  • 怎样自己做网络推广网站怎么上传网站数据库
  • DRW项目kaggle竞赛回归方案二
  • 微信小程序怎么做网站链接网站建设公司比较
  • 网站制作电话多少钱wordpress主题技术网
  • diplexer与duplexer
  • 【项目案例】使用project制作项目计划
  • 深入理解连接跟踪(conntrack)
  • PyTorch 张量学习
  • Network Radar for Mac 网络扫描管理软件
  • 公司 网站制作个人网站开发盈利模式
  • 公明网站制作中卫网站建设哪家好
  • 注塑机ai视觉检测 智能AI视觉检测介绍
  • MySQL8数据库高级特性(下)
  • 系统架构设计师备考第38天——系统架构评估
  • 使用Spring Boot构建Web服务层