Python在cmd上打印彩色文字


    在Windows上編寫python程序時,有時候需要對輸出的文字顏色進行設置,特別是日志顯示,不同級別的日志設置不同的顏色進行展示可以直觀查看。本文主要描述通過ctypes.windll.kernel32調用GetStdHandle()和SetConsoleTextAttribute()兩個API實現來實現Windows控制台的彩色背景及彩色文字。

基本概念描述

    首先分別介紹GetStdHandle()和SetConsoleTextAttribute()這兩個API。

    (1) GetStdHandle()的作用是獲取輸入、輸出/錯誤的屏幕緩沖區的句柄。函數聲明如下:

HANDLE GetStdHandle(
          DWORD nStdHandle 
      );

       其參數nStdHandle的值為下面幾種類型的一種:

STD_INPUT_HANDLE 標准輸入的句柄
STD_OUTPUT_HANDLE 標准輸出的句柄
STD_ERROR_HANDLE 標准錯誤的句柄

    GetStdHandle()返回標准的輸入、輸出或錯誤的設備的句柄,也就是獲得輸入、輸出/錯誤的屏幕緩沖區的句柄。

    (2)SetConsoleTextAttribute() 的作用是在控制台中設置輸入或輸出文本的文本顏色和背景顏色。其函數聲明如下:

  BOOL SetConsoleTextAttribute(
      HANDLE hConsoleOutput,  //  console 屏幕緩沖區的句柄
      WORD wAttributes        // 文本及背景的顏色
  );

    文本與背景顏色設置可以參考Windows上"color /?"命令的說明。顏色屬性由兩個十六進制數字指定 -- 第一個為背景,第二個則為前景。每個數字可以為以下任何值之一,如下

    0 = 黑色       8 = 灰色
    1 = 藍色       9 = 淡藍色
    2 = 綠色       A = 淡綠色
    3 = 淺綠色     B = 淡淺綠色
    4 = 紅色       C = 淡紅色
    5 = 紫色       D = 淡紫色
    6 = 黃色       E = 淡黃色
    7 = 白色       F = 亮白色

   如果函數設置文本及背景顏色成功,則返回非0。如果設置失敗返回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')

輸出展示:

 說明:如果需要增加不同前景色或者背景色的組合輸出,可以參考代碼和上述顏色編號增加。

使用實例

  1、將上述prt_cmd_color.py文件放在與待執行腳本ping_ip.py同一目錄下。或者通過sys.path.append()將prt_cmd_color.py文件所在的目錄添加到搜索路徑下。

  2、ping_ip.py腳本中import prt_cmd_color導入模塊或者執行from prt_cmd_color import printGreen, printRed導入指定函數。

  3、ping_ip.py代碼內容如下:

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、執行結果如下圖所示。命令執行成功,以綠色顯示提示信息,執行失敗以紅色顯示提示信息。

參考資料

  1、Python實現修改Windows CMD命令行輸出顏色

  2、C++如何更改控制台顏色


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM