2025年4月12日 星期六 乙巳(蛇)年 正月十三 设为首页 加入收藏
rss
您当前的位置:首页 > 计算机 > 编程开发 > Python

Python在cmd上打印彩色文字

时间:11-11来源:作者:点击数:34

在Windows上编写python程序时,有时候需要对输出的文字颜色进行设置,特别是日志显示,不同级别的日志设置不同的颜色进行展示可以直观查看。本文主要描述通过ctypes.windll.kernel32调用GetStdHandle()和SetConsoleTextAttribute()两个API实现来实现Windows控制台的彩色背景及彩色文字。

基本概念描述

首先分别介绍GetStdHandle()和SetConsoleTextAttribute()这两个API。

(1)GetStdHandle()的作用是获取输入、输出/错误的屏幕缓冲区的句柄。函数声明如下:

  • HANDLE GetStdHandle(
  • DWORD nStdHandle
  • );

其参数nStdHandle的值为下面几种类型的一种:

  • STD_INPUT_HANDLE 标准输入的句柄
  • STD_OUTPUT_HANDLE 标准输出的句柄
  • STD_ERROR_HANDLE 标准错误的句柄

GetStdHandle()返回标准的输入、输出或错误的设备的句柄,也就是获得输入、输出/错误的屏幕缓冲区的句柄。

(2)SetConsoleTextAttribute()的作用是在控制台中设置输入或输出文本的文本颜色和背景颜色。其函数声明如下:

  • BOOL SetConsoleTextAttribute(
  • HANDLE hConsoleOutput, // console 屏幕缓冲区的句柄
  • WORD wAttributes // 文本及背景的颜色
  • );

文本与背景颜色设置可以参考Windows上"color /?"命令的说明。颜色属性由两个十六进制数字指定 -- 第一个为背景,第二个则为前景。每个数字可以为以下任何值之一,如下

  • 0 = 黑色 8 = 灰色
  • 1 = 蓝色 9 = 淡蓝色
  • 2 = 绿色 A = 淡绿色
  • 3 = 浅绿色 B = 淡浅绿色
  • 4 = 红色 C = 淡红色
  • 5 = 紫色 D = 淡紫色
  • 6 = 黄色 E = 淡黄色
  • 7 = 白色 F = 亮白色

如果函数设置文本及背景颜色成功,则返回非0。如果设置失败返回0。

prt_cmd_color.py参考代码如下:

  • #-*- coding:utf-8 -*-#
  • #filename: prt_cmd_color.py
  • import ctypes,sys
  • STD_INPUT_HANDLE = -10
  • STD_OUTPUT_HANDLE = -11
  • STD_ERROR_HANDLE = -12
  • #字体颜色定义 text colors
  • FOREGROUND_BLUE = 0x09 # blue.
  • FOREGROUND_GREEN = 0x0a # green.
  • FOREGROUND_RED = 0x0c # red.
  • FOREGROUND_YELLOW = 0x0e # yellow.
  • # 背景颜色定义 background colors
  • BACKGROUND_YELLOW = 0xe0 # yellow.
  • # get handle
  • std_out_handle = ctypes.windll.kernel32.GetStdHandle(STD_OUTPUT_HANDLE)
  • def set_cmd_text_color(color, handle=std_out_handle):
  • Bool = ctypes.windll.kernel32.SetConsoleTextAttribute(handle, color)
  • return Bool
  • #reset white
  • def resetColor():
  • set_cmd_text_color(FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE)
  • #green
  • def printGreen(mess):
  • set_cmd_text_color(FOREGROUND_GREEN)
  • sys.stdout.write(mess + '\n')
  • resetColor()
  • #red
  • def printRed(mess):
  • set_cmd_text_color(FOREGROUND_RED)
  • sys.stdout.write(mess + '\n')
  • resetColor()
  • #yellow
  • def printYellow(mess):
  • set_cmd_text_color(FOREGROUND_YELLOW)
  • sys.stdout.write(mess + '\n')
  • resetColor()
  • #white bkground and black text
  • def printYellowRed(mess):
  • set_cmd_text_color(BACKGROUND_YELLOW | FOREGROUND_RED)
  • sys.stdout.write(mess + '\n')
  • resetColor()
  • if __name__ == '__main__':
  • printGreen('printGreen:Gree Color Text')
  • printRed('printRed:Red Color Text')
  • printYellow('printYellow:Yellow Color Text')

输出展示:

说明:如果需要增加不同前景色或者背景色的组合输出,可以参考代码和上述颜色编号增加。

使用实例

1、将上述prt_cmd_color.py文件放在与待执行脚本ping_ip.py同一目录下。或者通过sys.path.append()将prt_cmd_color.py文件所在的目录添加到搜索路径下。

2、ping_ip.py脚本中import prt_cmd_color导入模块或者执行from prt_cmd_color import printGreen, printRed导入指定函数。

3、ping_ip.py代码内容如下:

  • import os, sys
  • sys.path.append('d:\temp')
  • from prt_cmd_color import printGreen, printRed
  • for ip in ['192.168.1.104', '192.168.1.105']:
  • ret = os.system('ping -n 2 -w 3 %s > nul' % (ip,))
  • if ret == 0:
  • printGreen("%s success" % (ip,))
  • else:
  • printRed("%s fail" % (ip,))

4、执行结果如下图所示。命令执行成功,以绿色显示提示信息,执行失败以红色显示提示信息。

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门