为什么termcolor输出控制字符而不是Windows控制台中的彩色文本?

时间:2014-02-18 15:43:55

标签: python windows windows-console termcolor

我刚在Windows上为Python 2.7安装了termcolor。当我尝试打印彩色文本时,我会得到颜色代码。

from termcolor import colored
print colored('Text text text', 'red')

结果如下:

Screenshot of the Windows console window with the line: "←31mText text text←[0m"

我在远程管理器上获得了相同的结果,当我尝试将脚本作为独立应用程序运行时。

5 个答案:

答案 0 :(得分:25)

要使termcolor中使用的ANSI颜色与windows终端一起使用,您还需要导入/初始化colorama;

>>> from termcolor import *
>>> cprint('hello', 'red')
←[31mhello←[0m
>>> import colorama
>>> colorama.init()
>>> cprint('hello', 'red')
hello                                    <-- in red color
>>>

答案 1 :(得分:2)

在termcolor2模块中,您必须输入以下内容:

import termcolor2
import colorama
colorama.init()

myText = input("Type a text : ")
color = input("What color you want? : ")

print(termcolor2.colored(myText, color))

就这样...

答案 2 :(得分:0)

完成

在导入termcolor之前插入:

false

没有工作:

  1. 导入colorama(没有)修复问题-仍然显示字符
  2. 导入/使用termcolor2(没有)修复问题-仍然显示
    字符
  3. 导入colorama AND termcolor2和termcolor(未)修复 问题。

无法解释为什么它起作用,只是我能够比较一种颜色正确起作用的脚本和一个颜色不能正确起作用的脚本。

答案 3 :(得分:0)

一个非常简单的解决方案是创建一个定义颜色的类并在函数中使用它,您不必导入任何模块,只需将其复制并粘贴即可:-

class bcolors:
    HEADER = '\033[95m'
    OKBLUE = '\033[94m'
    OKCYAN = '\033[96m'
    OKGREEN = '\033[92m'
    WARNING = '\033[93m'
    FAIL = '\033[91m'
    ENDC = '\033[0m'
    BOLD = '\033[1m'
    UNDERLINE = '\033[4m'


def c_print(color, text):
    if color == "green":
        return print(bcolors.OKGREEN + text + bcolors.ENDC)
    if color == "cyan":
        return print(bcolors.OKCYAN + text + bcolors.ENDC)
    if color == "blue":
        return print(bcolors.OKBLUE + text + bcolors.ENDC)

line = f"{bcolors.OKCYAN}It will wish you on every start up{bcolors.ENDC}"
c_print("cyan", line)

Image showing the color in cmd

答案 4 :(得分:-1)

这是我发现对彩色打印有用的简单功能。您不需要进行任何导入,也不必记住复杂的ANSI代码。该函数使用标准的RGB元组定义前景色和背景色。您可以在https://www.google.com/search?q=rgb+color+picker&oq=rgb+color+picker&aqs=chrome..69i57j0l7.5967j0j8&sourceid=chrome&ie=UTF-8

中找到RGB颜色选择器。
def print_in_color(txt_msg,fore_tupple,back_tupple,):
    #prints the text_msg in the foreground color specified by fore_tupple with the background specified by back_tupple 
    #text_msg is the text, fore_tupple is foregroud color tupple (r,g,b), back_tupple is background tupple (r,g,b)
    rf,gf,bf=fore_tupple
    rb,gb,bb=back_tupple
    msg='{0}' + txt_msg
    mat='\33[38;2;' + str(rf) +';' + str(gf) + ';' + str(bf) + ';48;2;' + str(rb) + ';' +str(gb) + ';' + str(bb) +'m' 
    print(msg .format(mat))
    print('\33[0m') # returns default print color to back to black

# example of use using a message with variables
fore_color='cyan'
back_color='dark green'
msg='foreground color is {0} and the background color is {1}'.format(fore_color, back_color)
print_in_color(msg, (0,255,255),(0,127,127))