Python termcolor module 会这样做吗?这对于某些用途来说是一个粗略的等价物。
from termcolor import colored
print colored('hello', 'red'), colored('world', 'green')
这个例子来自this post,它还有很多。这是文档中示例的一部分
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 模块中可用,并且对 order 和类似内容也很敏感。)
一个方便的转义码列表令人惊讶地难以找到,但有很多关于终端行为以及如何控制它的参考资料。 Wiki page on ANSI escape codes 包含所有信息,但需要一些工作才能将它们组合在一起。 Bash prompt 上的页面有很多具体有用的信息。这是another page,带有直接的代码表。
还有更多。
这可以与termocolor 之类的模块一起使用。