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

涡轮沙利文:

有Perl的任何Python等效

print color 'red';
print <something>;
print color 'reset';

在python中可用?

我知道解决方案;

"\x1b[1;%dm" % (<color code>) + "ERROR: log file does not exist" + "\x1b[0m"

我想要的是我应该能够为所有打印消息设置颜色,例如,

print color 'red'
function_print_something(<some message>)
print color 'reset'

这里的“ function_print_something”是我的python函数,它将一些格式化的日志消息打印到屏幕上。

出租:

请问Python的termcolor模块呢?对于某些用途,这将是大致等效的。

from termcolor import colored

print colored('hello', 'red'), colored('world', 'green')

这个例子就在这篇文章的右边,该文章还有很多。这是docs示例的一部分

import sys
from termcolor import colored, cprint

text = colored('Hello, World!', 'red', attrs=['reverse', 'blink'])
print(text)
cprint('Hello, World!', 'green', 'on_red')

一个特殊的要求是设置颜色,并可能设置其他终端属性,以便所有后续打印都采用这种方式。虽然我在原始帖子中说过此模块可以实现,但现在我不这么认为。请参阅最后一节以了解执行此操作的方法。

但是,大多数情况下,我们用彩色文字(一两行)打印一小段文字。因此,这些示例中的界面可能比“打开”颜色,打印然后关闭它更好。(就像所示的Perl示例一样。)Perhaphs可以在打印函数中添加可选参数以对输出进行着色,并且可以在函数中使用模块的函数对文本进行着色。这也使解决格式和着色之间的偶尔冲突变得更加容易。只是一个想法。


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

将适当的ANSI序列发送到终端后,所有后续文本都将以这种方式呈现。因此,如果我们希望以后打印到此终端的所有文本均为亮红色/粗体红色,请打印,ESC[然后打印“ bright”属性(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 ..."

要关闭任何先前设置的属性,请对属性\033[0;35m(洋红色)使用0

要在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模块中可用,并且对顺序和类似内容也敏感。)


令人惊讶的是,很难找到一个方便的转义代码列表,尽管有很多关于终端行为以及如何控制它的参考。ANSI转义码上Wiki页包含所有信息,但需要一些工作才能将它们组合在一起。Bash上的页面提示具有许多特定的有用信息。这是带有直接代码表的另一页还有更多。

可以与类似的模块一起使用termocolor

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用C / C ++,如何在终端支持的情况下以彩色打印到标准输出?

如何在 C++ 中将 vector<int> 打印到终端

如何将opencv终端输出打印到网页(Python)

如何在Vim中将命令输出打印到新窗口

如何在pyqt gui中将测试输出打印到标签

如何在python 3中打印到标准输出?

如何存储“top”的输出而不是将其打印到终端?

如何将终端格式的输出打印到变量

如何在批处理脚本中将命令的输出打印到文件?

如何在python的终端顶部打印新输出?

在python中将Postgresql表打印到标准输出

在Python中将JSON POST响应/输出打印到屏幕

如何在终端中启用RGB彩色输出?

如何在golang中将标准输出同时保存到字符串的同时打印到标准输出?

如何在此Haskell代码中打印到终端?

如何在Python中打印到stderr?

如何在python中将不同的结果打印到屏幕和文件?

如何在python中将字符串列表打印到表中?

如何在python中将串行数据打印到标签中?

如何阻止python RuntimeWarning从打印到终端?

如何在Postscript中将变量打印到stdout

如何在Go中将消息打印到stderr?

如何在Rcpp中将R对象打印到stderr?

如何在R中将隐藏的列打印到CSV文件

如何在 nancy 中将 JSON 打印到 C#

如何在C#中将数组的内容打印到标签

如何在WPF中将整个ScrollViewer打印到PDF文件

如何在Tkinter中将值打印到Label中

如何在CentOS中将文件内容打印到屏幕上