Python在cmd上打印彩色文字实现过程详解


Posted in Python onAugust 07, 2019

前言

在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 /?"命令的说明。颜色属性由两个十六进制数字指定 -- 第一个为背景,第二个则为前景。每个数字可以为以下任何值之一,如下

= 黑色    8 = 灰色
= 蓝色    9 = 淡蓝色
= 绿色    A = 淡绿色
= 浅绿色   B = 淡浅绿色
= 红色    C = 淡红色
= 紫色    D = 淡紫色
= 黄色    E = 淡黄色
= 白色    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')

输出展示:

Python在cmd上打印彩色文字实现过程详解

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

使用实例

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、执行结果如下图所示。命令执行成功,以绿色显示提示信息,执行失败以红色显示提示信息。

Python在cmd上打印彩色文字实现过程详解

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python深入学习之上下文管理器
Aug 31 Python
Python合并多个装饰器小技巧
Apr 28 Python
Python中的if、else、elif语句用法简明讲解
Mar 11 Python
详解Python自建logging模块
Jan 29 Python
python 定时任务去检测服务器端口是否通的实例
Jan 26 Python
python获取交互式ssh shell的方法
Feb 14 Python
Python学习笔记之图片人脸检测识别实例教程
Mar 06 Python
在python中用print()输出多个格式化参数的方法
Jul 16 Python
Django 开发环境配置过程详解
Jul 18 Python
python从内存地址上加载python对象过程详解
Jan 08 Python
Java如何基于wsimport调用wcf接口
Jun 17 Python
Python 中面向接口编程
May 20 Python
Python如何调用外部系统命令
Aug 07 #Python
PyQt5通信机制 信号与槽详解
Aug 07 #Python
python 使用socket传输图片视频等文件的实现方式
Aug 07 #Python
python获取Pandas列名的几种方法
Aug 07 #Python
python 提取文件指定列的方法示例
Aug 07 #Python
PyQt Qt Designer工具的布局管理详解
Aug 07 #Python
Python BeautifulSoup [解决方法] TypeError: list indices must be integers or slices, not str
Aug 07 #Python
You might like
PHP 调试工具Debug Tools
2011/04/30 PHP
淘宝ip地址查询类分享(利用淘宝ip库)
2014/01/07 PHP
浅谈PHP中JSON数据操作
2015/07/01 PHP
详解PHP防止盗链防止迅雷下载的方法
2017/04/26 PHP
Laravel find in set排序实例
2019/10/09 PHP
jQuery温习篇 强大的JQuery选择器
2010/04/24 Javascript
基于Asp.net与Javascript控制的日期控件
2010/05/22 Javascript
jquery网页回到顶部效果(图标渐隐,自写)
2014/06/16 Javascript
详细分析JavaScript函数定义
2015/07/16 Javascript
jQuery Tags Input Plugin(添加/删除标签插件)详解
2016/06/20 Javascript
jQuery Mobile和HTML5开发App推广注册页
2016/11/07 Javascript
Javascript基础回顾之(一) 类型
2017/01/31 Javascript
超全面的vue.js使用总结
2017/02/12 Javascript
详解基于Vue+Koa的pm2配置
2017/10/24 Javascript
vue打包后显示空白正确处理方法
2017/11/01 Javascript
取消Bootstrap的dropdown-menu点击默认关闭事件方法
2018/08/10 Javascript
vue项目上传Github预览的实现示例
2018/11/06 Javascript
Python中的pygal安装和绘制直方图代码分享
2017/12/08 Python
Python多线程扫描端口代码示例
2018/02/09 Python
Python中按键来获取指定的值
2019/03/02 Python
pytorch-神经网络拟合曲线实例
2020/01/15 Python
解决python -m pip install --upgrade pip 升级不成功问题
2020/03/05 Python
python文件编写好后如何实践
2020/07/07 Python
CSS3 特效范例整理
2011/08/22 HTML / CSS
Juicy Couture Beauty官方网站:香水和化妆品
2019/03/12 全球购物
Vertbaudet西班牙网上商店:婴儿服装、童装、母婴用品和儿童家具
2019/10/16 全球购物
美国购买舞会礼服网站:Couture Candy
2019/12/29 全球购物
英国奢侈品在线精品店:Hervia
2020/09/03 全球购物
产品质量承诺书范文
2014/03/27 职场文书
增员口号大全
2014/06/18 职场文书
民事诉讼授权委托书范文
2014/08/02 职场文书
反洗钱宣传活动总结
2014/08/26 职场文书
改作风抓落实促发展心得体会
2014/09/10 职场文书
2015年秘书个人工作总结
2015/04/25 职场文书
写给媳妇的检讨书
2015/05/06 职场文书
Golang并发工具Singleflight
2022/05/06 Golang