博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python实现修改Windows CMD命令行输出颜色(完全解析)
阅读量:6881 次
发布时间:2019-06-27

本文共 7167 字,大约阅读时间需要 23 分钟。

hot3.png

1、程序运行结果展示

134751_6yoh_2008177.jpg

2、核心代码介绍

# get handlestd_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

这里应该是获取输出窗口的句柄,和Windows的编程特性有关。

关键代码其实就一句:

 set_cmd_text_color(这里参数要填颜色的16进制编码)

颜色的讲解:

这个函数支持2位十六进制编码,比如0x12,0x03,0xef。取值都是0~f。区别在于,前一位指的是背景色,后一位指的是前景色,我们为了方便,可以给这些颜色编码定义一些有意义的别名。比如:

# Windows CMD命令行 字体颜色定义 text colorsFOREGROUND_BLACK = 0x00 # black.FOREGROUND_DARKBLUE = 0x01 # dark blue.FOREGROUND_DARKGREEN = 0x02 # dark green.FOREGROUND_DARKSKYBLUE = 0x03 # dark skyblue.FOREGROUND_DARKRED = 0x04 # dark red.FOREGROUND_DARKPINK = 0x05 # dark pink.FOREGROUND_DARKYELLOW = 0x06 # dark yellow.FOREGROUND_DARKWHITE = 0x07 # dark white.FOREGROUND_DARKGRAY = 0x08 # dark gray.FOREGROUND_BLUE = 0x09 # blue.FOREGROUND_GREEN = 0x0a # green.FOREGROUND_SKYBLUE = 0x0b # skyblue.FOREGROUND_RED = 0x0c # red.FOREGROUND_PINK = 0x0d # pink.FOREGROUND_YELLOW = 0x0e # yellow.FOREGROUND_WHITE = 0x0f # white.# Windows CMD命令行 背景颜色定义 background colorsBACKGROUND_BLUE = 0x10 # dark blue.BACKGROUND_GREEN = 0x20 # dark green.BACKGROUND_DARKSKYBLUE = 0x30 # dark skyblue.BACKGROUND_DARKRED = 0x40 # dark red.BACKGROUND_DARKPINK = 0x50 # dark pink.BACKGROUND_DARKYELLOW = 0x60 # dark yellow.BACKGROUND_DARKWHITE = 0x70 # dark white.BACKGROUND_DARKGRAY = 0x80 # dark gray.BACKGROUND_BLUE = 0x90 # blue.BACKGROUND_GREEN = 0xa0 # green.BACKGROUND_SKYBLUE = 0xb0 # skyblue.BACKGROUND_RED = 0xc0 # red.BACKGROUND_PINK = 0xd0 # pink.BACKGROUND_YELLOW = 0xe0 # yellow.BACKGROUND_WHITE = 0xf0 # white.

注意下边这句:把不同颜色进行或操作,结果肯定还是16种颜色的一种。

set_cmd_text_color(FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE)

3、完整代码

我把每种颜色代码都封装成了易用的函数,可以根据需要在自己的程序里直接导入相应函数进行彩色输出。

比如原来是 print 'hello'   现在直接 printBlue('hello') 就可以了。

#! /usr/bin/env python#coding=utf-8import ctypes,sysSTD_INPUT_HANDLE = -10STD_OUTPUT_HANDLE = -11STD_ERROR_HANDLE = -12# 字体颜色定义 ,关键在于颜色编码,由2位十六进制组成,分别取0~f,前一位指的是背景色,后一位指的是字体色#由于该函数的限制,应该是只有这16种,可以前景色与背景色组合。也可以几种颜色通过或运算组合,组合后还是在这16种颜色中# Windows CMD命令行 字体颜色定义 text colorsFOREGROUND_BLACK = 0x00 # black.FOREGROUND_DARKBLUE = 0x01 # dark blue.FOREGROUND_DARKGREEN = 0x02 # dark green.FOREGROUND_DARKSKYBLUE = 0x03 # dark skyblue.FOREGROUND_DARKRED = 0x04 # dark red.FOREGROUND_DARKPINK = 0x05 # dark pink.FOREGROUND_DARKYELLOW = 0x06 # dark yellow.FOREGROUND_DARKWHITE = 0x07 # dark white.FOREGROUND_DARKGRAY = 0x08 # dark gray.FOREGROUND_BLUE = 0x09 # blue.FOREGROUND_GREEN = 0x0a # green.FOREGROUND_SKYBLUE = 0x0b # skyblue.FOREGROUND_RED = 0x0c # red.FOREGROUND_PINK = 0x0d # pink.FOREGROUND_YELLOW = 0x0e # yellow.FOREGROUND_WHITE = 0x0f # white.# Windows CMD命令行 背景颜色定义 background colorsBACKGROUND_BLUE = 0x10 # dark blue.BACKGROUND_GREEN = 0x20 # dark green.BACKGROUND_DARKSKYBLUE = 0x30 # dark skyblue.BACKGROUND_DARKRED = 0x40 # dark red.BACKGROUND_DARKPINK = 0x50 # dark pink.BACKGROUND_DARKYELLOW = 0x60 # dark yellow.BACKGROUND_DARKWHITE = 0x70 # dark white.BACKGROUND_DARKGRAY = 0x80 # dark gray.BACKGROUND_BLUE = 0x90 # blue.BACKGROUND_GREEN = 0xa0 # green.BACKGROUND_SKYBLUE = 0xb0 # skyblue.BACKGROUND_RED = 0xc0 # red.BACKGROUND_PINK = 0xd0 # pink.BACKGROUND_YELLOW = 0xe0 # yellow.BACKGROUND_WHITE = 0xf0 # white.# get handlestd_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 whitedef resetColor():    set_cmd_text_color(FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE)################################################################暗蓝色#dark bluedef printDarkBlue(mess):    set_cmd_text_color(FOREGROUND_DARKBLUE)    sys.stdout.write(mess)    resetColor()#暗绿色#dark greendef printDarkGreen(mess):    set_cmd_text_color(FOREGROUND_DARKGREEN)    sys.stdout.write(mess)    resetColor()#暗天蓝色#dark sky bluedef printDarkSkyBlue(mess):    set_cmd_text_color(FOREGROUND_DARKSKYBLUE)    sys.stdout.write(mess)    resetColor()#暗红色#dark reddef printDarkRed(mess):    set_cmd_text_color(FOREGROUND_DARKRED)    sys.stdout.write(mess)    resetColor()#暗粉红色#dark pinkdef printDarkPink(mess):    set_cmd_text_color(FOREGROUND_DARKPINK)    sys.stdout.write(mess)    resetColor()#暗黄色#dark yellowdef printDarkYellow(mess):    set_cmd_text_color(FOREGROUND_DARKYELLOW)    sys.stdout.write(mess)    resetColor()#暗白色#dark whitedef printDarkWhite(mess):    set_cmd_text_color(FOREGROUND_DARKWHITE)    sys.stdout.write(mess)    resetColor()#暗灰色#dark graydef printDarkGray(mess):    set_cmd_text_color(FOREGROUND_DARKGRAY)    sys.stdout.write(mess)    resetColor()#蓝色#bluedef printBlue(mess):    set_cmd_text_color(FOREGROUND_BLUE)    sys.stdout.write(mess)    resetColor()#绿色#greendef printGreen(mess):    set_cmd_text_color(FOREGROUND_GREEN)    sys.stdout.write(mess)    resetColor()#天蓝色#sky bluedef printSkyBlue(mess):    set_cmd_text_color(FOREGROUND_SKYBLUE)    sys.stdout.write(mess)    resetColor()#红色#reddef printRed(mess):    set_cmd_text_color(FOREGROUND_RED)    sys.stdout.write(mess)    resetColor()#粉红色#pinkdef printPink(mess):    set_cmd_text_color(FOREGROUND_PINK)    sys.stdout.write(mess)    resetColor()#黄色#yellowdef printYellow(mess):    set_cmd_text_color(FOREGROUND_YELLOW)    sys.stdout.write(mess)    resetColor()#白色#whitedef printWhite(mess):    set_cmd_text_color(FOREGROUND_WHITE)    sys.stdout.write(mess)    resetColor()###################################################白底黑字#white bkground and black textdef printWhiteBlack(mess):    set_cmd_text_color(FOREGROUND_BLACK | BACKGROUND_WHITE)    sys.stdout.write(mess)    resetColor()#白底黑字#white bkground and black textdef printWhiteBlack_2(mess):    set_cmd_text_color(0xf0)    sys.stdout.write(mess)    resetColor()#黄底蓝字#white bkground and black textdef printYellowRed(mess):    set_cmd_text_color(BACKGROUND_YELLOW | FOREGROUND_RED)    sys.stdout.write(mess)    resetColor()##############################################################if __name__ == '__main__':        print    printDarkBlue(u'printDarkBlue:暗蓝色文字\n'.encode('gb2312'))    printDarkGreen(u'printDarkGreen:暗绿色文字\n'.encode('gb2312'))    printDarkSkyBlue(u'printDarkSkyBlue:暗天蓝色文字\n'.encode('gb2312'))    printDarkRed(u'printDarkRed:暗红色文字\n'.encode('gb2312'))    printDarkPink(u'printDarkPink:暗粉红色文字\n'.encode('gb2312'))    printDarkYellow(u'printDarkYellow:暗黄色文字\n'.encode('gb2312'))    printDarkWhite(u'printDarkWhite:暗白色文字\n'.encode('gb2312'))    printDarkGray(u'printDarkGray:暗灰色文字\n'.encode('gb2312'))    printBlue(u'printBlue:蓝色文字\n'.encode('gb2312'))    printGreen(u'printGreen:绿色文字\n'.encode('gb2312'))    printSkyBlue(u'printSkyBlue:天蓝色文字\n'.encode('gb2312'))    printRed(u'printRed:红色文字\n'.encode('gb2312'))    printPink(u'printPink:粉红色文字\n'.encode('gb2312'))    printYellow(u'printYellow:黄色文字\n'.encode('gb2312'))    printWhite(u'printWhite:白色文字\n'.encode('gb2312'))        printWhiteBlack(u'printWhiteBlack:白底黑字输出\n'.encode('gb2312'))    printWhiteBlack_2(u'printWhiteBlack_2:白底黑字输出(直接传入16进制参数)\n'.encode('gb2312'))    printYellowRed(u'printYellowRed:黄底红字输出\n'.encode('gb2312'))

转载于:https://my.oschina.net/bluefly/blog/311209

你可能感兴趣的文章
《每个设计师都应该掌握的50个css代码段》31~35段
查看>>
Chrome浏览器插件开发心得
查看>>
ubuntu eclipse 配置 gtk+2.0 库
查看>>
Maven是什么
查看>>
Tomcat理解
查看>>
ImageMagick批量压缩图片
查看>>
C语言调用COM组件
查看>>
学习spring必须java基础知识-事务基础知识
查看>>
屏芯智能餐饮系统v1.6PC版
查看>>
MacBook Pro Retina 安装 ubuntu
查看>>
linux deepin 安装破解版本 navicat 10
查看>>
获取MP3和M4A音乐文件的歌曲信息以及专辑图片
查看>>
vundle for windows
查看>>
依赖和关联的区别
查看>>
JPA各种字段的映射
查看>>
No module named MYSQLdb 问题解决
查看>>
java使用jeids实现redis2.6的连接
查看>>
python使用mysqlclient替代MySQLdb
查看>>
android studio 3.2(AS) 使用 AndroidAnnotation (AA)注解框架
查看>>
archlinux更新数据源
查看>>