python命令行or控制台or日志带有颜色的输出

news2024/11/24 18:51:41

python命令行or控制台or日志带有颜色的输出

python控制台带颜色输出

在几年前,我写过一个项目,喜欢花里胡哨的我看到别人输出到控制台带有颜色,于是我也想要。

于是乎不知道从哪里搜到的资料,是拼凑起来的颜色代码块。

当时用着没问题,现在用着其实也没问题。但一旦迁移到别的平台设备或者是外部调用的时候,就会出现问题。

早期带有颜色输出的代码如下:

msg = "我是一个有颜色的字体!"
print('\033[0;33m{}'.format(msg))

输出样式如下:

请添加图片描述

对这种方式感兴趣的小伙伴可以去搜索相关资料,但我建议你真的感兴趣,可以往下继续看!

颜色异常输出示例

用之前颜色代码拼凑输出,通过命令行调用的时候,发现直接输出的是颜色代码,而不是带有颜色的字体。

请添加图片描述

这里稍微讲解一下。

在终端中设置输出文本的颜色可以使用 ANSI 转义序列来实现。但是,Windows 中的默认控制台不始终支持 ANSI 转义序列,因此可能无法正确显示颜色。

如果在 Windows 上运行这段代码,并且控制台没有正确显示颜色,可以安装第三方库 colorama 来解决此问题。colorama 库是一个跨平台的 Python 模块,可以使在终端中显示 ANSI 转义序列变得更简单。

划重点:跨平台!!!(我已邀请大佬做过测试,windows,mac完美!)

colorma模块的使用

安装

pip install colorama

基本使用

import colorama
from colorama import Fore, Style

# 初始化 colorama 库
colorama.init()

def print_info(msg):
    print(Fore.GREEN + msg + Style.RESET_ALL)

通过导入 colorama 库,并使用 Fore.GREEN 来设置文本的前景色为绿色,Style.RESET_ALL 用于重置文本的样式,可以在 Windows 控制台上正确显示颜色。

为了正常显示颜色,确保的控制台支持 ANSI 转义序列或安装了 colorama 库。如果使用的是其他操作系统或终端模拟器,通常可以直接使用 ANSI 转义序列来设置输出的颜色。

封装自己的颜色输出

import colorama
# 初始化 colorama 库
colorama.init()
def print_info(msg: str):
    print(colorama.Fore.GREEN + str(msg) + colorama.Style.RESET_ALL)
def print_waring(msg: str):
    print(colorama.Fore.YELLOW + str(msg) + colorama.Style.RESET_ALL)
def print_error(msg):
    print(colorama.Fore.RED + str(msg) + colorama.Style.RESET_ALL)

这样你想输出哪种颜色就调用哪种颜色就好。

你依旧还是想用print进行输出的话,固定一种颜色可以使用如下代码。

import time
import colorama
_print = print
def print(msg:str):
    _print(colorama.Fore.GREEN + str(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())) + " [mwjApiTest]  " + str(msg) + colorama.Style.RESET_ALL)
    
print("我打印一段文字")

效果如下

在这里插入图片描述

可支持的颜色:

BLACK           
RED             
GREEN         
YELLOW         
BLUE            
MAGENTA        
CYAN            
WHITE           
RESET          

# These are fairly well supported, but not part of the standard.
LIGHTBLACK_EX   
LIGHTRED_EX     
LIGHTGREEN_EX   
LIGHTYELLOW_EX 
LIGHTBLUE_EX    
LIGHTMAGENTA_EX 
LIGHTCYAN_EX  
LIGHTWHITE_EX 

对应输出效果

请添加图片描述

带有颜色的日志输出

使用colorlog

colorlog 是一个方便的 Python 日志库,可以帮助在控制台中添加颜色和样式来美化日志输出。下面是 colorlog 库的使用示例:

  1. 安装 colorlog
pip install colorlog
  1. 导入 colorlog
import colorlog
  1. 创建 colorlog 的日志记录器:
logger = colorlog.getLogger()
  1. 添加控制台处理器:
console_handler = colorlog.StreamHandler()
logger.addHandler(console_handler)
#设置输出等级,这里我不进行设置
logger.setLevel("NOTSET")
  1. 设置日志记录格式:
log_format = '%(log_color)s%(levelname)s:%(message)s'
console_format = colorlog.ColoredFormatter(log_format)
console_handler.setFormatter(console_format)
  1. 打印日志:
logger.debug('This is a debug message')
logger.info('This is an info message')
logger.warning('This is a warning message')
logger.error('This is an error message')
logger.critical('This is a critical message')

输出样式:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zGkUMLtS-1692690396784)(images/image-20230730162030148.png)]

通过 colorlog,可以使用 log_color 变量将颜色和样式应用于日志级别(levelname)和消息(message)。可以根据需要自定义日志记录格式。

请注意,在 Windows 上,想要正常显示颜色,需要在使用 colorlog 之前初始化 colorama 来处理 ANSI 转义序列:

import colorama
colorama.init()

以上是 colorlog 库的基本使用示例。可以按照自己的需求使用更高级的日志功能,如添加文件处理器、设置日志级别等。详细的用法可以参考 colorlog 的文档:https://pypi.org/project/colorlog/

实操:编写带颜色输出的单例模式日志器

这段代码可以直接替换自己以前没有颜色输出的日志代码。

class Logger:
    __instance = None
    # 往屏幕上输出
    screen_output = logging.StreamHandler()

    def __new__(cls, path=None, level='DEBUG', RotatingFileHandler: BaseRotatingHandler = None):
        '''
        单列模式
        :param path: 报告的路径
        :param level: 日志的等级常用,INFO,DEBUG,WARNING,ERROR
        :param RotatingFileHandler:
        '''

        if not cls.__instance:
            colorama.init()
            cls.__instance = super().__new__(cls)
            log = logging.getLogger("mwjApiTest")
            # 设置日志级别
            log.setLevel(level)
            cls.__instance.log = log

        if path:
            if not os.path.isdir(path):
                os.mkdir(path)
            if RotatingFileHandler and isinstance(RotatingFileHandler, BaseRotatingHandler):
                fh = RotatingFileHandler
            else:
                # # 往文件里写入#指定间隔时间自动生成文件的处理器
                fh = TimedRotatingFileHandler(os.path.join(path, 'mwjApiTest.log'), when='D', interval=1,
                                              backupCount=7, encoding='utf-8')

            fh.setLevel(level)
            cls.__instance.log.addHandler(fh)
            # 定义handler的输出格式
            formatter = logging.Formatter("%(levelname)-8s%(asctime)s%(name)s:%(filename)s:%(lineno)d %(message)s")
            fh.setFormatter(formatter)
        return cls.__instance

    def set_level(self, level):
        """设置日志输出的等级"""
        self.log.setLevel(level)

    #### 设置输出的颜色
    def fontColor(self):
        # 不同的日志输出不同的颜色
        formatter = colorlog.ColoredFormatter(
            '%(log_color)s[%(asctime)s] [%(name)s] [%(levelname)s]: %(message)s',
            log_colors={
                'DEBUG': 'cyan',
                'INFO': 'green',
                'WARNING': 'yellow',
                'ERROR': 'red',
                'CRITICAL': 'red,bg_white',
            },
        )
        self.screen_output.setFormatter(formatter)
        self.log.addHandler(self.screen_output)

测试

aa = Logger()
aa.debug('This is a debug message')
aa.info('This is an info message')
aa.warning('This is a warning message')
aa.error('This is an error message')
aa.critical('This is a critical message')

请添加图片描述

结束!

后续希望我更新什么可以在后台留言哦 ~

公众号:梦无矶的测试开发之路

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/913117.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

服务注册中心 Eureka

服务注册中心 Eureka Spring Cloud Eureka 是 Netflix 公司开发的注册发现组件,本身是一个基于 REST 的服务。提供注册与发现,同时还提供了负载均衡、故障转移等能力。 Eureka 有 3 个角色 服务中心(Eureka Server):…

【Apollo学习笔记】——规划模块TASK之PATH_REUSE_DECIDER

文章目录 前言PATH_REUSE_DECIDER功能简介PATH_REUSE_DECIDER相关配置PATH_REUSE_DECIDER总体流程PATH_REUSE_DECIDER相关子函数IsCollisionFreeTrimHistoryPathIsIgnoredBlockingObstacle和GetBlockingObstacleS Else参考 前言 在Apollo星火计划学习笔记——Apollo路径规划算…

1克硬件变化+99%软件能力,点燃XR行业第二时代之战

夕小瑶科技说 原创 作者 | 卖萌酱 你的下一代手表,可以是没有手表!即将在8月26日发布空间计算新品的Rokid,近日发表路透视频:AR眼镜使用场景下,抬起手腕就能出现虚拟手表表盘,握一下拳即切换到天气模式。…

0006Java程序设计-jsp婚恋交友网设计与实现

摘 要 在线交友是互联网发展的必然产物,它改变了人们的网络交往形态,使得人们的即时通信变得更加的直观和亲切,并且具有良好的发展趋势。 婚恋交友网站我们使用 Microsoft公司的JSP开发工具,利用其提供的各种面向对象的开发工具…

武汉凯迪正大—变比组别测试仪

一、概述 在电力变压器的半成品、成品生产过程中,新安装的变压器投入运行之前以及根据国家电力部的预防性试验规程中,要求变压器进行匝数比或电压比测试。传统的变比电桥操作繁琐,读数不直观,且要进行必要的换算,测试时…

关于 大屏项目的参考

1、自适应组件 : v-scale-screen https://huaweicloud.csdn.net/638eec6cdacf622b8df8dc59.html 2、参考项目: https://zhuanlan.zhihu.com/p/634382389

leetcode 714. 买卖股票的最佳时机含手续费

2023.8.22 本题和买卖股票的最佳时机II 几乎一样&#xff0c;就是增加了一个手续费&#xff0c;需要在卖出股票的时候减去手续费fee即可。 代码如下&#xff1a; class Solution { public:int maxProfit(vector<int>& prices, int fee) {vector<vector<int&g…

第十六课、利用 EnigmaVB 打包 Qt 应用程序

功能描述&#xff1a;详细介绍如何利用 EnigmaVB 打包 Qt 应用程序&#xff0c;从 EnigmaVB 软件下载、安装&#xff0c;到如何使用&#xff0c;一步步教你走进 EnigmaVB 软件&#xff0c;最后还介绍了一款针对 Enigma Virtual Box 制作的单文件程序进行解包的工具 EnigmaVBUnp…

利用全志H616 MangoPi MQ Quad部署一个网络摄像头

本文男二号海康威视720p USB摄像头出场&#xff0c;尊容如下&#xff1a; SBC需连接网络&#xff1a; rootorangepizero2:~# ifconfig wlan0: flags4163< UP,BROADCAST,RUNNING,MULTICAST > mtu 1500inet 192.168.99.217 netmask 255.255.255.0 broadcast 192.168.99…

诺依框架ruoyi.js添加默认当年日期范围

ruoyi.js添加方法 // 默认当年日期范围如&#xff1a;2023-01-01到2023-08-22&#xff08;至今&#xff09; export function defaultYearDate(data) {// this.dateDefaultShow new Date();// this.dateDefaultShow.setMonth(new Date().getMonth() - 1);const end new Date…

Twinmotion电脑配置要求,如何低成本高效流畅运行Twinmotion

Twinmotion是一款专门面向建筑、工程、城市规划和景观园林领域而设计的实时可视化渲染软件。与传统较为漫长的渲染过程相比&#xff0c;它可以在几秒钟内轻松制作高品质的图像、全景图、规格图或360VR视频文件。 并且&#xff0c;作为市面上备受欢迎的交互式实时可视化软件&am…

mysql 8.0 窗口函数 之 前后函数、收尾函数、其它函数 与 sql server (2017以后支持) 一样

前后函数 LAG(expr,n) 返回当前行的前n行的expr的值LEAD(expr,n) 返回当前行的后n行的expr的值 收尾函数 FIRST_VALUE(expr) 返回第一个expr的值LAST_VALUE(expr) 返回最后一个expr的值 其它函数 1.NTH_Value(expr,n) 返回第N个expr的值 2. NTILE(n) 将分区中的有序数据分为…

Java课题笔记~ MyBatis分页查询插件

1.添加依赖 <!-- https://mvnrepository.com/artifact/com.github.pagehelper/pagehelper --> <dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper</artifactId><version>5.2.0</version> </de…

三种插槽的基本使用

为什么要用插槽&#xff1f; 为了实现父组件每次使用组件时&#xff0c;有不一样的呈现 设置的时候比我们props传值更简单 子组件引用时可以写更加复杂的结构 简单地说就是你自定义的组件在被父组件引用时&#xff0c;本身是有一部分是给你开放的&#xff0c;里面是可以添加其他…

Lua之Lua源文件批量转换为luac字节码文件

准备的工具:luac.exe CSDNhttps://mp.csdn.net/mp_download/manage/download/UpDetailed Unity版: using System; using System.Collections; using System.Collections.Generic; using System.IO; using UnityEditor; using UnityEngine;public static class Batch_LuaToLu…

基于Jenkins自动打包并部署Tomcat环境-------从小白到大神之路之学习运维第85天

第四阶段提升 时 间&#xff1a;2023年8月22日 参加人&#xff1a;全班人员 内 容&#xff1a; 基于Jenkins自动打包并部署Tomcat环境 目录 一、传统网站部署的流程 &#xff08;一&#xff09;传统代码上线的过程 &#xff08;二&#xff09;目前主流网站部署的流程 …

在mac下,使用Docker安装达梦数据库

前言&#xff1a;因为业务需要安装达梦数据库 获取官网下载tar包&#xff08;达梦官网的下载页面https://www.dameng.com/list_103.html&#xff09;&#xff0c;或者通过命令 一、下载tar包 命令下载&#xff1a;wget -O dm8_docker.tar -c https://download.dameng.com/eco/…

matlab将数组值划分为两类

例如&#xff1a;大于0的处理为1&#xff0c;小于0的处理为-1. 当然&#xff0c;可以选择循环结构和选择结构&#xff0c;但是效率会很低。 这里直接使用逻辑语句完成。 % 不使用循环语句&#xff0c;将数组内值划分为两类 clc; clearvars; a[-0.1422 , -0.0433 , 0.1131 …

[ MySQL ] — 如何理解索引以及索引的操作

目录 初识索引 认识磁盘 MySQL与存储 了解磁盘 mysql与磁盘的交互 索引的理解 理解单个Page 理解多个Page 页目录 单页情况 多页情况 索引结构 - B树 聚簇索引 和 非聚簇索引 索引操作 创建主键索引 唯一索引的创建 ​编辑 普通索引的创建 全文索引的创建 查询…

outlook等客户端报错:-ERR Login fail. Please using weixin token to login

使用outlook配置腾讯邮箱后&#xff0c;无法收取邮件&#xff0c;点击接收/发送所有文件夹&#xff0c; 提示报错&#xff1a; 任务“testqq.com - 正在接收”报告了错误(0x800CCC92):“电子邮件服务器拒绝您登录。请在“帐户设置”中验证此帐户的用户名及密码。 响应服务器:…