zoukankan      html  css  js  c++  java
  • 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 + '
    ')
        resetColor()
    
    #red
    def printRed(mess):
        set_cmd_text_color(FOREGROUND_RED)
        sys.stdout.write(mess + '
    ')
        resetColor()
      
    #yellow
    def printYellow(mess):
        set_cmd_text_color(FOREGROUND_YELLOW)
        sys.stdout.write(mess + '
    ')
        resetColor()
    
    #white bkground and black text
    def printYellowRed(mess):
        set_cmd_text_color(BACKGROUND_YELLOW | FOREGROUND_RED)
        sys.stdout.write(mess + '
    ')
        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:	emp')
    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++如何更改控制台颜色

  • 相关阅读:
    【python】PyQt5 QAction 添加点击事件
    【环境搭建】安装pyQt5 在pycharm报This application failed to start because no Qt platform plugin could be initialized的问题
    【嵌入式】arduino IDE串口监视器可以正常使用但其他软件发送串口指令没有反应的问题
    【操作系统】bat文件 系统找不到文件路径
    十天冲刺:第二天
    十天冲刺:第一天
    项目需求分析NABCD电梯演讲
    项目需求分析与建议-NABCD模型
    团队开发之团队介绍
    会议1.7
  • 原文地址:https://www.cnblogs.com/linyfeng/p/8286506.html
Copyright © 2011-2022 走看看