AberSheeran
Aber Sheeran

输出彩色命令行

起笔自
所属文集: Python-Package
共计 1817 个字符
落笔于

Windows7之后的Windows系统自带的CMD或者Powershell,就不再支持ANSI代码来控制颜色了。那么我们如果想要改变Windows的命令行颜色,只好通过Windows给的句柄来控制颜色。

import sys
import ctypes

if sys.platform.startswith('win'):
    stdout = ctypes.windll.kernel32.GetStdHandle(-11)
    def printf(value, color=None, **kwargs):
        if color is None:
            print(value, flush=True, **kwargs)
        elif color == "green":
            ctypes.windll.kernel32.SetConsoleTextAttribute(stdout, 0x0a)
            print(value, flush=True, **kwargs)
        elif color == "yellow":
            ctypes.windll.kernel32.SetConsoleTextAttribute(stdout, 0x0e)
            print(value, flush=True, **kwargs)
        elif color == "red":
            ctypes.windll.kernel32.SetConsoleTextAttribute(stdout, 0x0c)
            print(value, flush=True, **kwargs)
        else:
            raise AttributeError("The color is unexpected!")
        ctypes.windll.kernel32.SetConsoleTextAttribute(stdout, 0x0f)

首先ctypes.windll.kernel32.GetStdHandle(-11)是获取stdout的句柄。然后通过ctypes.windll.kernel32.SetConsoleTextAttribute(句柄,颜色代码)控制文字和背景颜色。

为了代码更好看,我们或许需要更好的封装这些函数。但这些都没必要,Python的哲学就是别造重复的轮子

Colorama

只需要pip install colorama,就可以使用封装好的跨平台命令行颜色控制库。

可用格式参数如下

  • Fore: BLACK, RED, GREEN, YELLOW, BLUE, MAGENTA, CYAN, WHITE, RESET.
  • Back: BLACK, RED, GREEN, YELLOW, BLUE, MAGENTA, CYAN, WHITE, RESET.
  • Style: DIM, NORMAL, BRIGHT, RESET_ALL

在Github上给的样例如下

from colorama import Fore, Back, Style
print(Fore.RED + 'some red text')
print(Back.GREEN + 'and with a green background')
print(Style.DIM + 'and in dim text')
print(Style.RESET_ALL)
print('back to normal now')

可以在代码前加以下两行让Python的print支持ASNI代码来控制任意平台的输出颜色

from colorama import init
init()

需要自动回复字体颜色还可以这样

from colorama import init
init(autoreset=True)

就无须手动恢复字体颜色了。

如果你觉得本文值得,不妨赏杯茶
Supervisor
Django app配置子域名