Python让你的终端输出变得五彩斑斓

  • 前言
  • Linux下终端变换颜色
  • window下终端颜色显示
  • 平台通用的方法
  • 最后的最后

前言

也许你希望在终端上输出一些带有颜色或者粗体、下划线等样式的信息,就像man中的那样;
又或者海量的信息堆砌在控制台导致各种信息都显示在一起,让人抓不住重点,或者使用python处理文档文件的时候,希望能看到一些中重点语句。
这时候,如果能给重要的信息加上差异的字体颜色,那么就会更加显眼,增加使用者可阅读性。
本文来简单介绍一下如何实现在终端变换颜色。

Linux下终端变换颜色

linux和windows平台修改终端显示颜色的方式是不一样的,当然其实也有通用的方法,这个在本文最后会讲。
先说一下Linux平台的方法,使用转义序列来实现不同颜色的显示。
转义序列是以ESC开头,即用\033来完成(ESC的ASCII码用十进制表示是27,用八进制表示就是033)。而终端的字符颜色是用转义序列控制的,是文本模式下的系统显示功能,和具体的语言无关。
它的格式如下:

\033[显示方式;前景色;背景色m

其中显示方式,前景色,背景色参数如下:

前景色 背景色 颜色 显示方式 意义
30 40 黑色 0 终端默认设置
31 41 红色 1 粗体 高亮显示
32 42 绿色 22 非粗体 非高亮显示
33 43 黃色 4 使用下划线
34 44 蓝色 24 去下划线
35 45 紫红色 5 闪烁
36 46 青蓝色 25 去闪烁
37 47 白色 7 反白显示
27 非反显
8 不可见
28 可见

前景色后景色可以不设置,显示方式也可以不设置(默认为0)

print('\033[0;31;1m' )
print('*' * 50)
print('*HOST:\t', 2019)
print('*URI:\t', 'http://127.0.0.1')
print('*TIME:\t', '20:58')
print('*' * 50)
print('\033[0m')

输出结果如下:

测试文件如下:

#   格式:\033[显示方式;前景色;背景色m
#   说明:
#
#   前景色            背景色            颜色
#   ---------------------------------------
#     30                40              黑色
#     31                41              红色
#     32                42              绿色
#     33                43              黃色
#     34                44              蓝色
#     35                45              紫红色
#     36                46              青蓝色
#     37                47              白色
#
#   显示方式           意义
#   -------------------------
#      0           终端默认设置
#      1             高亮显示
#      4            使用下划线
#      5              闪烁
#      7             反白显示
#      8              不可见
#
#   例子:
#   \033[1;31;40m    <!--1-高亮显示 31-前景色红色  40-背景色黑色-->
#   \033[0m          <!--采用终端默认设置,即取消颜色设置-->]]]STYLE = {'fore':{   # 前景色'black'    : 30,   #  黑色'red'      : 31,   #  红色'green'    : 32,   #  绿色'yellow'   : 33,   #  黄色'blue'     : 34,   #  蓝色'purple'   : 35,   #  紫红色'cyan'     : 36,   #  青蓝色'white'    : 37,   #  白色},'back' :{   # 背景'black'     : 40,  #  黑色'red'       : 41,  #  红色'green'     : 42,  #  绿色'yellow'    : 43,  #  黄色'blue'      : 44,  #  蓝色'purple'    : 45,  #  紫红色'cyan'      : 46,  #  青蓝色'white'     : 47,  #  白色},'mode' :{   # 显示模式'mormal'    : 0,   #  终端默认设置'bold'      : 1,   #  高亮显示'underline' : 4,   #  使用下划线'blink'     : 5,   #  闪烁'invert'    : 7,   #  反白显示'hide'      : 8,   #  不可见},'default' :{'end' : 0,},
}def UseStyle(string, mode = '', fore = '', back = ''):mode  = '%s' % STYLE['mode'][mode] if mode in STYLE['mode'] else ''fore  = '%s' % STYLE['fore'][fore] if fore in STYLE['fore'] else ''back  = '%s' % STYLE['back'][back] if back in STYLE['back'] else ''style = ';'.join([s for s in [mode, fore, back] if s])style = '\033[%sm' % style if style else ''end   = '\033[%sm' % STYLE['default']['end'] if style else ''return '%s%s%s' % (style, string, end)def TestColor( ):print (UseStyle('正常显示'))print ("测试显示模式")print (UseStyle('高亮',   mode = 'bold'))print (UseStyle('下划线', mode = 'underline'))print (UseStyle('闪烁',   mode = 'blink'))print (UseStyle('反白',   mode = 'invert'))print (UseStyle('不可见', mode = 'hide'))print ("测试前景色")print (UseStyle('黑色',   fore = 'black'))print (UseStyle('红色',   fore = 'red'))print (UseStyle('绿色',   fore = 'green'))print (UseStyle('黄色',   fore = 'yellow'))print (UseStyle('蓝色',   fore = 'blue'))print (UseStyle('紫红色', fore = 'purple'))print (UseStyle('青蓝色', fore = 'cyan'))print (UseStyle('白色',   fore = 'white'))print ("测试背景色")print (UseStyle('黑色',   back = 'black'))print (UseStyle('红色',   back = 'red'))print (UseStyle('绿色',   back = 'green'))print (UseStyle('黄色',   back = 'yellow'))print (UseStyle('蓝色',   back = 'blue'))print (UseStyle('紫红色', back = 'purple'))print (UseStyle('青蓝色', back = 'cyan'))print (UseStyle('白色',   back = 'white'))if __name__ == '__main__':TestColor( )

结果如下:

各种模式与颜色对比图如下:

window下终端颜色显示

windows下面稍微有点不一样

import ctypes,sysSTD_INPUT_HANDLE = -10
STD_OUTPUT_HANDLE = -11
STD_ERROR_HANDLE = -12# 字体颜色定义 ,关键在于颜色编码,由2位十六进制组成,分别取0~f,前一位指的是背景色,后一位指的是字体色
#由于该函数的限制,应该是只有这16种,可以前景色与背景色组合。也可以几种颜色通过或运算组合,组合后还是在这16种颜色中# Windows CMD命令行 字体颜色定义 text colors
FOREGROUND_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 colors
BACKGROUND_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 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)################################################################暗蓝色
#dark blue
def printDarkBlue(mess):set_cmd_text_color(FOREGROUND_DARKBLUE)sys.stdout.write(mess)resetColor()#暗绿色
#dark green
def printDarkGreen(mess):set_cmd_text_color(FOREGROUND_DARKGREEN)sys.stdout.write(mess)resetColor()#暗天蓝色
#dark sky blue
def printDarkSkyBlue(mess):set_cmd_text_color(FOREGROUND_DARKSKYBLUE)sys.stdout.write(mess)resetColor()#暗红色
#dark red
def printDarkRed(mess):set_cmd_text_color(FOREGROUND_DARKRED)sys.stdout.write(mess)resetColor()#暗粉红色
#dark pink
def printDarkPink(mess):set_cmd_text_color(FOREGROUND_DARKPINK)sys.stdout.write(mess)resetColor()#暗黄色
#dark yellow
def printDarkYellow(mess):set_cmd_text_color(FOREGROUND_DARKYELLOW)sys.stdout.write(mess)resetColor()#暗白色
#dark white
def printDarkWhite(mess):set_cmd_text_color(FOREGROUND_DARKWHITE)sys.stdout.write(mess)resetColor()#暗灰色
#dark gray
def printDarkGray(mess):set_cmd_text_color(FOREGROUND_DARKGRAY)sys.stdout.write(mess)resetColor()#蓝色
#blue
def printBlue(mess):set_cmd_text_color(FOREGROUND_BLUE)sys.stdout.write(mess)resetColor()#绿色
#green
def printGreen(mess):set_cmd_text_color(FOREGROUND_GREEN)sys.stdout.write(mess)resetColor()#天蓝色
#sky blue
def printSkyBlue(mess):set_cmd_text_color(FOREGROUND_SKYBLUE)sys.stdout.write(mess)resetColor()#红色
#red
def printRed(mess):set_cmd_text_color(FOREGROUND_RED)sys.stdout.write(mess)resetColor()#粉红色
#pink
def printPink(mess):set_cmd_text_color(FOREGROUND_PINK)sys.stdout.write(mess)resetColor()#黄色
#yellow
def printYellow(mess):set_cmd_text_color(FOREGROUND_YELLOW)sys.stdout.write(mess)resetColor()#白色
#white
def printWhite(mess):set_cmd_text_color(FOREGROUND_WHITE)sys.stdout.write(mess)resetColor()
###################################################白底黑字
#white bkground and black text
def printWhiteBlack(mess):set_cmd_text_color(FOREGROUND_BLACK | BACKGROUND_WHITE)sys.stdout.write(mess)resetColor()
#白底黑字
#white bkground and black text
def printWhiteBlack_2(mess):set_cmd_text_color(0xf0)sys.stdout.write(mess)resetColor()#黄底蓝字
#white bkground and black text
def printYellowRed(mess):set_cmd_text_color(BACKGROUND_YELLOW | FOREGROUND_RED)sys.stdout.write(mess)resetColor()##############################################################
if __name__ == '__main__': printprintDarkBlue(u'printDarkBlue:暗蓝色文字\n')printDarkGreen(u'printDarkGreen:暗绿色文字\n')printDarkSkyBlue(u'printDarkSkyBlue:暗天蓝色文字\n')printDarkRed(u'printDarkRed:暗红色文字\n')printDarkPink(u'printDarkPink:暗粉红色文字\n')printDarkYellow(u'printDarkYellow:暗黄色文字\n')printDarkWhite(u'printDarkWhite:暗白色文字\n')printDarkGray(u'printDarkGray:暗灰色文字\n')printBlue(u'printBlue:蓝色文字\n')printGreen(u'printGreen:绿色文字\n')printSkyBlue(u'printSkyBlue:天蓝色文字\n')printRed(u'printRed:红色文字\n')printPink(u'printPink:粉红色文字\n')printYellow(u'printYellow:黄色文字\n')printWhite(u'printWhite:白色文字\n')printWhiteBlack(u'printWhiteBlack:白底黑字输出\n')printWhiteBlack_2(u'printWhiteBlack_2:白底黑字输出\n')printYellowRed(u'printYellowRed:黄底红字输出\n')

平台通用的方法

python 有一个库colorama , 这个库可以支持修改颜色

pip3 install colorama

实例

from colorama import init, Fore, Back, Styleif __name__ == "__main__":init(autoreset=True)    #  初始化,并且设置颜色设置自动恢复# 如果未设置autoreset=True,需要使用如下代码重置终端颜色为初始设置#print(Fore.RESET + Back.RESET + Style.RESET_ALL)  autoreset=Trueprint(Fore.RED + 'some red text')print(Back.GREEN + 'and with a green background')print(Style.DIM + 'and in dim text')print('back to normal now')

最后的最后

找到一个两个平台通用的代码,其实就是上面介绍的方法整合一下:

import platform
if 'Windows' in platform.system():import sysimport ctypes__stdInputHandle = -10__stdOutputHandle = -11__stdErrorHandle = -12__foreGroundBLUE = 0x09__foreGroundGREEN = 0x0a__foreGroundRED = 0x0c__foreGroundYELLOW = 0x0estdOutHandle=ctypes.windll.kernel32.GetStdHandle(__stdOutputHandle)def setCmdColor(color,handle=stdOutHandle):return ctypes.windll.kernel32.SetConsoleTextAttribute(handle, color)def resetCmdColor():setCmdColor(__foreGroundRED | __foreGroundGREEN | __foreGroundBLUE)def printBlue(msg):setCmdColor(__foreGroundBLUE)sys.stdout.write(msg + '\n')resetCmdColor()def printGreen(msg):setCmdColor(__foreGroundGREEN)sys.stdout.write(msg + '\n')resetCmdColor()def printRed(msg):setCmdColor(__foreGroundRED)sys.stdout.write(msg + '\n')resetCmdColor()def printYellow(msg):setCmdColor(__foreGroundYELLOW)sys.stdout.write(msg + '\n')resetCmdColor()
else:STYLE = {'fore':{'red': 31,'green': 32,'yellow': 33,'blue': 34,}}def UseStyle(msg, mode = '', fore = '', back = '40'):fore = '%s' % STYLE['fore'][fore] if STYLE['fore'].has_key(fore) else ''style = ';'.join([s for s in [mode, fore, back] if s])style = '\033[%sm' % style if style else ''end = '\033[%sm' % 0 if style else ''return '%s%s%s' % (style, msg, end)def printRed(msg):print UseStyle(msg,fore='red')def printGreen(msg):print UseStyle(msg,fore='green')def printYellow(msg):print UseStyle(msg,fore='yellow')def printBlue(msg):print UseStyle(msg,fore='blue')

Python让你的终端输出变得五彩斑斓相关推荐

  1. Linux(Ubuntu)使用setsid命令后台运行python代码并记录终端输出,并实现开机自启

    1.摘要 本文主要讲解:Linux(Ubuntu)使用setsid命令后台运行python代码并记录终端输出,并实现开机自启 主要思路: setsid命令 比nohub命令好用,setsid有些系统默 ...

  2. python类库丰富吗_Rich库:丰富你的Python程序终端输出

    Python是一门非常流行的语言,很多人也用它来写一些工具程序,辅助日常工作.说到写程序,大家自然想到的是各种功能强大的图形界面程序,但是写过GUI程序的朋友都知道,GUI程序虽然看起来好看,但是写起 ...

  3. Python终端输出中文

    Python终端输出中文: # -*- coding: UTF-8 -*- import jsontags = {"功能方向": ["基础监控-应用监控"]} ...

  4. VSCode调试Python时终端输出中文乱码解决方法2

    问题: 在 VS Code 中调试 Python 代码时,终端显示中文乱码,而在cmd也乱码: 解决: // 1.文件存储为utf-8格式 // 2.头部增加 # -*- coding: UTF-8 ...

  5. VSCode调试Python时终端输出中文乱码解决方法1

    问题: 在 VS Code 中调试 Python 代码时,终端显示中文乱码,而在cmd中直接运行正常: 解决: 菜单Debug->Open Configurations,打开launch.jso ...

  6. 带你了解Python炫酷的颜色输出与进度条打印

    Python风骚的打印 大家平时在Linux/Windows下安装软件时,经常会出现进度条和百分比的提示,Python是否能实现这样的打印?安装过程中,经常会看到很多带颜色的安装说明,我们在pytho ...

  7. print()在终端输出彩色字体

    print()在终端输出彩色字体 目录 一.终端字符颜色简介 二.在终端控制台实现输出彩色字体的软硬件条件 三.windows在终端输出彩色字体的方法 四.在终端输出彩色字体的语法 五.终端彩色字体例 ...

  8. 花里胡哨,如何在Linux终端输出带有颜色的字体,将带颜色的字体赋值给变量...

    背景 ​ 在日常操作Linux的情况下,总会遇到一些需求,比如说,把输出的内容用不同颜色标注出来,以达到醒目.提示的目的,那么如何在Linux终端输出带有颜色的字体呢? Linux终端输出字符颜色 ​ ...

  9. python起步输入-Python编程起步——输入与输出

    Python编程起步--输入与输出 通常,任何计算机程序都是为了执行一个特定的任务,比如:统计一个班同学的平均英语成绩,在显示器上画出一个半径为100个像素的红色圆圈,或者在视频播放器上播放一段指定的 ...

最新文章

  1. 【Henu ACM Round#15 A】 A and B and Chess
  2. pytorch bceloss测试
  3. matlab fill 渐变,Matlab的渐变色填充(一)
  4. Citrix产品及技术解析
  5. 树-当前结点与列表页不符的处理
  6. QComboBox样式
  7. php中节点值怎么获取,php – 节点更新:获取旧值
  8. 拒绝干扰 解决Wi-Fi的最大问题
  9. python数据获取及预处理_python数据预处理(入门)
  10. sed学习笔记(1) - 入门知识
  11. Codeforces Round #229 (Div. 2) 解题报告
  12. 国企公司java面试题_整理最全的Java笔试题库之问答题篇-国企笔试题库
  13. 螺旋线的画法---matlab代码
  14. Linux下Makefile的automake生成全攻略(转)
  15. Python入门学习小记:100以内素数/质数之和
  16. Excel从手机号和座机号混合文本中提取手机号码
  17. 穷爸爸富爸爸 读后感
  18. 【Python】Python知识点小记
  19. 【通关MySQL】Win11如何将MySQL卸载干净?
  20. 国内大学ip地址范围

热门文章

  1. t检验自由度的意义_在统计中自由度是什么?
  2. 虽焦虑迷惘,仍选择自由职业,只因……
  3. 平稳分布、细致平稳条件与 Gibbs 采样
  4. cf#644 div2 B. Boboniu Plays Chess
  5. mes系统故障_mes系统实施失败是什么原因?
  6. 自学python教程免费python教程视频
  7. android利用多线程加载图片【不使用第三方库】
  8. 机器人风马_泰迦奥特曼介绍了三个超兽,其中一个克制风马奥特曼
  9. 港股通不得不了解的汇率问题
  10. h5策划书_DIYH5|3.12世界睡眠日H5策划方案