如何用Python将彩色输出打印到终端?

如何用Python将彩色输出打印到终端?,python,Python,是否有与Perl相当的Python print color 'red'; print <something>; print color 'reset'; 打印颜色为“红色”; 印刷品; 打印颜色“重置”; 有空吗 我正在使用这种方法: "\x1b[1;%dm" % (<color code>) + "ERROR: log file does not exist" + "\x1b[0m" “\x1b[1;%d

是否有与Perl相当的Python

print color 'red';
print <something>;
print color 'reset';
打印颜色为“红色”;
印刷品;
打印颜色“重置”;
有空吗

我正在使用这种方法:

"\x1b[1;%dm" % (<color code>) + "ERROR: log file does not exist" + "\x1b[0m"
“\x1b[1;%dm”%()+”错误:日志文件不存在“+”\x1b[0m”
我想要的是,我应该能够为所有打印消息设置颜色,例如

print color 'red'
function_print_something(<some message>)
print color 'reset'
打印颜色为“红色”
函数\u打印\u某物()
打印颜色“重置”
这里的“function\u print\u something”是我的python函数,它将把一些格式化的日志消息打印到屏幕上。

可以吗?对于某些用途来说,这将是一个粗略的等价物

from termcolor import colored

print colored('hello', 'red'), colored('world', 'green')
这个例子来自,它有更多的内容

import sys
from termcolor import colored, cprint

text = colored('Hello, World!', 'red', attrs=['reverse', 'blink'])
print(text)
cprint('Hello, World!', 'green', 'on_red')
一个具体的要求是设置颜色,以及可能的其他终端属性,以便所有后续打印都是这样。虽然我在原始帖子中说,这在本模块中是可能的,但我现在不这么认为。有关实现方法,请参阅最后一节

但是,大多数情况下,我们用颜色打印文本的短段,一行或两行。因此,这些示例中的接口可能比“打开”颜色、打印然后关闭它更合适(如所示的Perl示例中所示)。也许您可以添加可选参数也可以使用打印函数对输出进行着色,并在函数中使用模块的函数对文本进行着色。这还可以更轻松地解决格式和着色之间的偶尔冲突。只是一个想法


下面是设置终端的基本方法,以便使用给定的颜色、属性或模式渲染所有后续打印

一旦将适当的ANSI序列发送到终端,以下所有文本都会以这种方式呈现。因此,如果我们希望将来打印到此终端的所有文本都是亮/粗红色,请打印
ESC[
,然后是“亮”属性(1)和红色(31)的代码,然后是
m

# print "\033[1;31m"   # this would emit a new line as well
import sys
sys.stdout.write("\033[1;31m")
print "All following prints will be red ..."
要关闭任何以前设置的属性,请使用0作为属性,
\033[0;35m
(洋红色)

要抑制python 3中的新行,请使用
print(“…”,end=“”)
。剩下的工作是将其打包以供模块化使用(并更容易理解)

文件colors.py

RED   = "\033[1;31m"  
BLUE  = "\033[1;34m"
CYAN  = "\033[1;36m"
GREEN = "\033[0;32m"
RESET = "\033[0;0m"
BOLD    = "\033[;1m"
REVERSE = "\033[;7m"
我建议您快速阅读一些代码参考资料。颜色和属性可以组合在一起,您可以在这个软件包中列出一个很好的列表。一个脚本

import sys
from colors import *

sys.stdout.write(RED)
print "All following prints rendered in red, until changed"

sys.stdout.write(REVERSE + CYAN)
print "From now on change to cyan, in reverse mode"
print "NOTE: 'CYAN + REVERSE' wouldn't work"

sys.stdout.write(RESET)
print "'REVERSE' and similar modes need be reset explicitly"
print "For color alone this is not needed; just change to new color"
print "All normal prints after 'RESET' above."
如果经常使用
sys.stdout.write()
是个麻烦,那么可以将它包装在一个小函数中,或者将包转换成一个类,其中包含设置终端行为的方法(打印ANSI代码)

上面的一些内容更像是一个查找它的建议,比如结合反转模式和颜色(这可以在问题中使用的Perl模块中找到,并且对顺序和类似情况也很敏感)


令人惊讶的是,很难找到一个方便的转义码列表,同时有许多关于终端行为以及如何控制它的参考文献。包含所有信息,但需要做一些工作才能将其组合在一起。上的页面有许多特定的有用信息。下面是代码的直接表格。 还有很多


这可以与诸如
termocolor

之类的模块一起使用,这里有一些库可以提供帮助。对于我有时使用的cmdline工具

e、 g

但是,您可能希望使用枚举和/或添加一些检查,而不是使用字符串。这不是最漂亮的解决方案,但适用于osx/linux和windows,并且易于使用

关于此主题和跨平台支持的其他线程:。

我建议。它类似于colorama,但不太详细,并且支持和颜色。您还可以使用自己的颜色扩展颜色寄存器

示例:

从sty导入fg、bg、ef、rs
foo=fg.red+“这是红色文本!”+fg.rs
bar=bg.blue+“这有一个蓝色背景!”+bg.rs
baz=ef.italic+“这是斜体文本”+rs.italic
qux=fg(201)+“这是使用8位颜色的粉色文本”+fg.rs
qui=fg(255,10,10)+“这是使用24位颜色的红色文本”。+fg.rs
#添加自定义颜色:
从sty导入样式,RgbFg
fg.orange=样式(RgbFg(255、150、50))
buf=fg.orange+“耶,我是橙色的。”+fg.rs
打印(foo、bar、baz、qux、qui、buf、sep='\n')

演示:


您可以在python 3中尝试这一点:

from termcolor import colored
print(colored('Hello, World!', 'green', 'on_red'))
如果您使用的是windows操作系统,则上述代码可能不适用于您。然后您可以尝试此代码:

from colorama import init
from termcolor import colored

# use Colorama to make Termcolor work on Windows too
init()

# then use Termcolor for all colored text output
print(colored('Hello, World!', 'green', 'on_red'))
希望对您有所帮助。

图书馆怎么样?您可以简单地执行以下操作:

从颜色导入颜色、红色、蓝色
#常见颜色
打印(红色(“这是红色”))
打印(蓝色(“这是蓝色”))
#按名称或代码显示颜色
打印(颜色(“按名称或代码打印颜色”、“白色”、“8a2be2”))

Color\u控制台库相对更易于使用。安装此库,以下代码将对您有所帮助

from Color_Console import *
ctext("This will be printed" , "white" , "blue")
The first argument is the string to be printed, The second argument is the color of 
the text and the last one is the background color.
最新版本的Color_Console允许您传递在指定延迟时间后将更改的颜色列表或字典

此外,它们的所有功能都有很好的文档


访问了解更多信息。

旁注:Windows用户应首先运行操作系统('color'),否则您将看到一些ANSI转义序列,而不是彩色输出。

与此处列出的方法相比,我更喜欢系统附带的方法。 在这里,我提供了一种没有第三方库的更好方法

class colors:#您可能需要更改颜色设置
红色='\033[31米'
ENDC='\033[m'
绿色='\033[32m'
黄色='\033[33m'
蓝色='\033[34米'
打印(colors.RED+“要以红色打印的内容”+colors.ENDC)
打印(colors.GREEN+“要以绿色打印的内容”+colors.ENDC)
打印(“要以系统默认颜色打印的内容”)
更多颜色代码,请参阅:


尽情享受吧!

“您也可以像在Perl示例中一样使用它——set
from Color_Console import *
ctext("This will be printed" , "white" , "blue")
The first argument is the string to be printed, The second argument is the color of 
the text and the last one is the background color.