Python在cmd上打印彩色文字實(shí)現(xiàn)過程詳解
前言
在Windows上編寫python程序時(shí),有時(shí)候需要對(duì)輸出的文字顏色進(jìn)行設(shè)置,特別是日志顯示,不同級(jí)別的日志設(shè)置不同的顏色進(jìn)行展示可以直觀查看。本文主要描述通過ctypes.windll.kernel32調(diào)用GetStdHandle()和SetConsoleTextAttribute()兩個(gè)API實(shí)現(xiàn)來實(shí)現(xiàn)Windows控制臺(tái)的彩色背景及彩色文字。
基本概念描述
首先分別介紹GetStdHandle()和SetConsoleTextAttribute()這兩個(gè)API。
(1) GetStdHandle()的作用是獲取輸入、輸出/錯(cuò)誤的屏幕緩沖區(qū)的句柄。函數(shù)聲明如下:
HANDLE GetStdHandle(
DWORD nStdHandle
);
其參數(shù)nStdHandle的值為下面幾種類型的一種:
STD_INPUT_HANDLE 標(biāo)準(zhǔn)輸入的句柄 STD_OUTPUT_HANDLE 標(biāo)準(zhǔn)輸出的句柄 STD_ERROR_HANDLE 標(biāo)準(zhǔn)錯(cuò)誤的句柄
GetStdHandle()返回標(biāo)準(zhǔn)的輸入、輸出或錯(cuò)誤的設(shè)備的句柄,也就是獲得輸入、輸出/錯(cuò)誤的屏幕緩沖區(qū)的句柄。
(2)SetConsoleTextAttribute() 的作用是在控制臺(tái)中設(shè)置輸入或輸出文本的文本顏色和背景顏色。其函數(shù)聲明如下:
BOOL SetConsoleTextAttribute( HANDLE hConsoleOutput, // console 屏幕緩沖區(qū)的句柄 WORD wAttributes // 文本及背景的顏色 );
文本與背景顏色設(shè)置可以參考Windows上"color /?"命令的說明。顏色屬性由兩個(gè)十六進(jìn)制數(shù)字指定 -- 第一個(gè)為背景,第二個(gè)則為前景。每個(gè)數(shù)字可以為以下任何值之一,如下
= 黑色 8 = 灰色 = 藍(lán)色 9 = 淡藍(lán)色 = 綠色 A = 淡綠色 = 淺綠色 B = 淡淺綠色 = 紅色 C = 淡紅色 = 紫色 D = 淡紫色 = 黃色 E = 淡黃色 = 白色 F = 亮白色
如果函數(shù)設(shè)置文本及背景顏色成功,則返回非0。如果設(shè)置失敗返回0。
prt_cmd_color.py參考代碼如下:
#-*- coding:utf-8 -*-#
#filename: prt_cmd_color.py
import ctypes,sys
STD_INPUT_HANDLE = -10
STD_OUTPUT_HANDLE = -11
STD_ERROR_HANDLE = -12
#字體顏色定義 text colors
FOREGROUND_BLUE = 0x09 # blue.
FOREGROUND_GREEN = 0x0a # green.
FOREGROUND_RED = 0x0c # red.
FOREGROUND_YELLOW = 0x0e # yellow.
# 背景顏色定義 background colors
BACKGROUND_YELLOW = 0xe0 # yellow.
# 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)
#green
def printGreen(mess):
set_cmd_text_color(FOREGROUND_GREEN)
sys.stdout.write(mess + '\n')
resetColor()
#red
def printRed(mess):
set_cmd_text_color(FOREGROUND_RED)
sys.stdout.write(mess + '\n')
resetColor()
#yellow
def printYellow(mess):
set_cmd_text_color(FOREGROUND_YELLOW)
sys.stdout.write(mess + '\n')
resetColor()
#white bkground and black text
def printYellowRed(mess):
set_cmd_text_color(BACKGROUND_YELLOW | FOREGROUND_RED)
sys.stdout.write(mess + '\n')
resetColor()
if __name__ == '__main__':
printGreen('printGreen:Gree Color Text')
printRed('printRed:Red Color Text')
printYellow('printYellow:Yellow Color Text')
輸出展示:

說明:如果需要增加不同前景色或者背景色的組合輸出,可以參考代碼和上述顏色編號(hào)增加。
使用實(shí)例
1、將上述prt_cmd_color.py文件放在與待執(zhí)行腳本ping_ip.py同一目錄下?;蛘咄ㄟ^sys.path.append()將prt_cmd_color.py文件所在的目錄添加到搜索路徑下。
2、ping_ip.py腳本中import prt_cmd_color導(dǎo)入模塊或者執(zhí)行from prt_cmd_color import printGreen, printRed導(dǎo)入指定函數(shù)。
3、ping_ip.py代碼內(nèi)容如下:
import os, sys
sys.path.append('d:\temp')
from prt_cmd_color import printGreen, printRed
for ip in ['192.168.1.104', '192.168.1.105']:
ret = os.system('ping -n 2 -w 3 %s > nul' % (ip,))
if ret == 0:
printGreen("%s success" % (ip,))
else:
printRed("%s fail" % (ip,))
4、執(zhí)行結(jié)果如下圖所示。命令執(zhí)行成功,以綠色顯示提示信息,執(zhí)行失敗以紅色顯示提示信息。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
python中matplotlib調(diào)整圖例位置的方法實(shí)例
在matplotlib中,一般圖例默認(rèn)是在圖表內(nèi)部的,如果要放置到圖例外面,需要對(duì)坐標(biāo)進(jìn)行指定,下面這篇文章主要給大家介紹了關(guān)于python中matplotlib調(diào)整圖例位置的相關(guān)資料,需要的朋友可以參考下2022-06-06
Python實(shí)現(xiàn)連通域標(biāo)記算法
如果把圖像分為前景和背景兩部分,那么連通域就是連通在一起的前景,這種關(guān)系對(duì)于二值圖像來說比較明顯,下面我們就來了解一下連通域標(biāo)記算法原理及其Python實(shí)現(xiàn)吧2023-12-12
Python最基本的數(shù)據(jù)類型以及對(duì)元組的介紹
這篇文章主要介紹了Python最基本的數(shù)據(jù)類型以及對(duì)元組的介紹,來自于IBM官方網(wǎng)站技術(shù)文檔,需要的朋友可以參考下2015-04-04
pyinstaller打包可執(zhí)行程序過程中的常見錯(cuò)誤解決
這篇文章主要介紹了pyinstaller打包可執(zhí)行程序過程中的常見錯(cuò)誤解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-11-11
python創(chuàng)建文件時(shí)去掉非法字符的方法
今天小編就為大家分享一篇python創(chuàng)建文件時(shí)去掉非法字符的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-10-10

