Windows下彩色化终端文字

更新:
clickcolorama 配合使用, 很方便, 比如:

1
2
3
4
5
6
#!/usr/bin/env python3
#-*- coding: utf-8 -*-

import click

click.secho("red text", fg="red")

最近有在 Windows 命令行程序下打印彩色文字的需要, 放了半天狗, 试了几个包, 都不是很满意, 最后还是使用决定 ctypes.

先看下例子 (超过 15 好像就是背景色了):

具体用法(Python 2.7.6下):

color_terminal_test.py
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
#!/usr/bin/env python
#-*- coding: utf-8 -*-

from __future__ import unicode_literals, print_function
from ctypes import windll, c_ulong

HANDLER = windll.Kernel32.GetStdHandle(c_ulong(0xfffffff5))
COLOR_MAPS = dict(
black=0,
blue=9,
dark_blue=1,
dark_green=2,
dark_navy=3,
dark_purple=5,
dark_red=4,
dark_white=7,
dark_yellow=6,
default=7,
gray=8,
green=10,
navy=11,
purple=13,
red=12,
white=15,
yellow=14,
)


def set_color(color="default"):
windll.Kernel32.SetConsoleTextAttribute(
HANDLER, COLOR_MAPS.get(color, 7)
)


def show_text(text, color="default", new_line=True):
set_color(color)
print("{}{}".format(text, "\n" if new_line else "), end=")
set_color()

show_text("yellow", color="yellow")

COLOR_MAPS 里多了一个 default, 这个就是默认终端下的文字颜色.