Python实现设置终端显示颜色、粗体、下划线等效果

也许你希望在终端上输出一些带有颜色或者粗体、下划线等样式的信息,就像man中的那样,那么这篇文章将会起到些许作用。

事件起因



Python开发项目过程中,为了方便调试代码,经常会向stdout中输出一些日志,默认的这些日志就直接显示在了终端中。

但是很杂乱的信息显示在一起,往往没有重点,一个一个找我们需要的信息往往特别复杂.

Linux下的终端设置


linux终端颜色设置信息



在Linux终端中,使用转义序列来进行如上所述的显示,转义序列以ESC开头,即ASCII码下的\033,其格式为:

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

显示方式、前景色、背景色至少一个存在即可。
格式:\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          <!--采用终端默认设置,即取消颜色设置-->
  • 1
  • 2
  • 1
  • 2

Linux下解决

#/usr/bin/python
#-*- coding: utf-8 -*-

#   格式:\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 STYLE['mode'].has_key(mode) else ''

    fore  = '%s' % STYLE['fore'][fore] if STYLE['fore'].has_key(fore) else ''

    back  = '%s' % STYLE['back'][back] if STYLE['back'].has_key(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 "测试显示模式"
    print UseStyle('高亮',   mode = 'bold'),
    print UseStyle('下划线', mode = 'underline'),
    print UseStyle('闪烁',   mode = 'blink'),
    print UseStyle('反白',   mode = 'invert'),
    print UseStyle('不可见', mode = 'hide')
    print ''

    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 "测试背景色"
    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')
    print ''
if __name__ == '__main__':

    TestColor( )

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132

附上用于测试的Linux下C程序

/**********************************************************
    > File Name: test.c
    > Author: GatieMe
    > Mail: gatieme@163.com
    > Created Time: 2015年04月26日 星期日 11时03分48秒
 *********************************************************/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

/**
 *
 *    格式:\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          <!--采用终端默认设置,即取消颜色设置-->
 **/

int main(void)
{
    int left, right;

    while(printf("\033[31m"),  /*  输入数据红色显示  */
          scanf("%d%d", &left, &right) != EOF)
    {
        printf("\033[1;32m%d\033[0m\n", left + right);  /* 输出信息绿色高亮显示  */

    }

    return  EXIT_SUCCESS;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56

window下终端颜色显示


终端I/O库WConio

项目地址:http://newcenturycomputers.net/projects/wconio.html

在linux系统中,终端内可以通过curse模块或控制字符来输出彩色文本,但是在windows系统中没有curse模块也不能用控制字符,只能调用win32console模块中的控制台相关函数。直接调用这些函数还是比较麻烦的,因此有人弄了个WConio模块,封装了这些函数的功能。使用WConio,彩色文本的输出变得简单:

import WConio
attr=WConio.gettextinfo()[4] #保存默认文本颜色
WConio.textcolor(WConio.RED) #将后续输出的文本的颜色设为红色
print "红色的文字"
WConio.settextattr(attr) #回复默认的文本颜色
  • 1
  • 2
  • 3
  • 4
  • 5
  • 1
  • 2
  • 3
  • 4
  • 5

调用底层C库


该代码片段来自于: http://www.sharejs.com/codes/python/8665

#!/usr/bin/env python
#encoding: utf-8
import ctypes

STD_INPUT_HANDLE = -10
STD_OUTPUT_HANDLE= -11
STD_ERROR_HANDLE = -12

FOREGROUND_BLACK = 0x0
FOREGROUND_BLUE = 0x01 # text color contains blue.
FOREGROUND_GREEN= 0x02 # text color contains green.
FOREGROUND_RED = 0x04 # text color contains red.
FOREGROUND_INTENSITY = 0x08 # text color is intensified.

BACKGROUND_BLUE = 0x10 # background color contains blue.
BACKGROUND_GREEN= 0x20 # background color contains green.
BACKGROUND_RED = 0x40 # background color contains red.
BACKGROUND_INTENSITY = 0x80 # background color is intensified.

class Color:
    ''' See http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winprog/winprog/windows_api_reference.asp
    for information on Windows APIs. - www.sharejs.com'''
    std_out_handle = ctypes.windll.kernel32.GetStdHandle(STD_OUTPUT_HANDLE)

    def set_cmd_color(self, color, handle=std_out_handle):
        """(color) -> bit
        Example: set_cmd_color(FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_INTENSITY)
        """
        bool = ctypes.windll.kernel32.SetConsoleTextAttribute(handle, color)
        return bool

    def reset_color(self):
        self.set_cmd_color(FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE)

    def print_red_text(self, print_text):
        self.set_cmd_color(FOREGROUND_RED | FOREGROUND_INTENSITY)
        print print_text
        self.reset_color()

    def print_green_text(self, print_text):
        self.set_cmd_color(FOREGROUND_GREEN | FOREGROUND_INTENSITY)
        print print_text
        self.reset_color()

    def print_blue_text(self, print_text):
        self.set_cmd_color(FOREGROUND_BLUE | FOREGROUND_INTENSITY)
        print print_text
        self.reset_color()

    def print_red_text_with_blue_bg(self, print_text):
        self.set_cmd_color(FOREGROUND_RED | FOREGROUND_INTENSITY| BACKGROUND_BLUE | BACKGROUND_INTENSITY)
        print print_text
        self.reset_color()   

if __name__ == "__main__":
    clr = Color()
    clr.print_red_text('red')
    clr.print_green_text('green')
    clr.print_blue_text('blue')
    clr.print_red_text_with_blue_bg('background')

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61

跨平台解决方案colorama



项目地址https://pypi.python.org/pypi/colorama

示例


#!/usr/bin/env python
#encoding: utf-8

from colorama import init, Fore, Back, Style

if __name__ == "__main__":

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

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

安装



使用pip安装

pip install colorama 
  • 1
  • 1

下载源码安装, 然后打开cmd进入源码目录

python setup.py build
python setup.py install
  • 1
  • 2
  • 1
  • 2

转载:http://blog.csdn.net/gatieme/article/details/45439671

时间: 2024-08-17 20:07:10

Python实现设置终端显示颜色、粗体、下划线等效果的相关文章

Android编程中TextView字体属性设置方法(大小、字体、下划线、背景色)_Android

本文实例讲述了Android编程中TextView字体属性设置方法(大小.字体.下划线.背景色).分享给大家供大家参考,具体如下: import android.content.Context; import android.graphics.Color; import android.text.SpannableString; import android.text.Spanned; import android.text.style.AbsoluteSizeSpan; import andr

求C# Richtextbox中 对文本加粗 斜体 下划线的代码 类似Word一样

问题描述 求C# Richtextbox中 对文本加粗 斜体 下划线的代码 类似Word一样 求大神给代码,最好像word中一样的功能,没有的话,类似的也可以,用C#写,举其中一个例子也行,不需要全部的 解决方案 http://www.cnblogs.com/jingmoxukong/articles/2118114.html 这个博客说的很清楚 你要的功能全部都有了 解决方案二: SelectionColor之类的 解决方案三: SelectionColor之类的

JavaScript bold方法入门实例(把指定文字显示为粗体)_基础知识

JavaScript bold 方法 lastIndexOf 方法返回使用 HTML b 标签定义的粗体字符串.其语法如下: 复制代码 代码如下: str_object.bold() 提示:该方法不符合 ECMA 标准,不建议使用. bold 方法实例 复制代码 代码如下: <script language="JavaScript"> var str = "www.jb51.net"; document.write(str.bold()); </s

Android TextView中文字通过SpannableString来设置超链接、颜色、字体等属性

在Android中,TextView是我们最常用的用来显示文本的控件.   一般情况下,TextView中的文本都是一个样式.那么如何对于TextView中各个部分的文本来设置字体,大小,颜色,样式,以及超级链接等属性呢?下面我们通过SpannableString的具体实例操作来演示一下.    res-layout-main.xml [html] view plaincopy <?xml version="1.0" encoding="utf-8"?>

Windows上C语言实现设置控制台的颜色

这里设置只要调用system();这个函数就行了,参数是字符串,想要设置终端的颜色,按照以下格式可以设置: //数字表示前景色,字母表示背景色 //color 0=黑色 1蓝色 2 绿色 3湖蓝色 4红色 5紫色 6黄色 7白色 8灰色 9淡蓝色 // A淡绿色 B淡浅绿色 C淡红色 D淡紫色 E淡黄色 F亮白色 所以,在程序中,只要写system("color 2D");就代表设置前景色为绿色,背景色为淡紫色. 在linux中,设置中断颜色是通过VT控制码来实现的,不需要调用syst

实例讲解用CSS设置多彩的连接下划线

css 链接下划线可以改变颜色吗?下面给大家讲解如何利用CSS改变连接下划线颜色. 我们在进行Web页面设计的时候,根据不同的需要,可能会想要去除链接下划线的效果.而此效果只需要一句话就可以解决了.代码如下:     text-decoration:none; 如果保留着链接文字的下划线,默认的颜色属性是如链接文字同样的颜色,看下面的例子: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://

CSS文字颜色不变下划线变颜色的实现

这里我们对3组文字设置三种不同颜色下划线,分别css命名为".divcss5-F00".".divcss5-00F".".divcss5-333" 二.使用css border实现字体下划线为实线还是虚线 - TOP 1.字体下划线颜色不同实现完整HTML源代码: <!DOCTYPE html>  <html>  <head>  <meta http-equiv="Content-Type&qu

iphone6 plus 调整字体为粗体显示的方法图解

步骤1:在iphone6 plus中我们可以进入找到"设置-通用"界面,接着我们点击里边的"辅助功能"选项进入. 步骤2:再才在这里我们找到里边的"粗体文本"一项, 然后我们再把它开启就可以了. 步骤3:现在你iphone6 plus就提示你iPhone,点击"继续"点击它吧. 好了iphone6 plus手机就可以启用粗体文本前后的视觉差异,粗体文本显示明显更清晰一些.

iphone6 调整字体为粗体显示 ios8字体调整方法

步骤1:在如下所示我们在iphone6界面找到"设置-通用" 然后在打页面中点击"辅助功能"选项进入. 步骤2: 在进入到辅助功能界面找到最下面的"粗体文本"  默认未开启此功能,现在我们开启它就可以了. 步骤3:然后手机会提示我们重启手机,然后我们点击"继续"按钮. 重新启动后即可看到启用粗体文本前后的视觉差异,粗体文本显示明显更清晰一些.