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

标签 python

是否有 Python 等价于 Perl 的

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

有货吗?

我正在使用这种方法:

"\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 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 等模块一起使用。

关于python - 如何在 Python 中将彩色输出打印到终端?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37340049/

相关文章:

python - 如何在pycharm终端自动打开url(不是点击打开)http ://127. 0.0.1 :8000 python manage. py runserver

python - 使用 pd.read_csv 自动检测 CSV 文件中的分隔符

python - 岭回归中的参数Alpha是什么?

python - 如何使用norm.ppf()?

python - 如何在重写 get 方法中返回常规响应,Django

python - 从嵌套列表创建树结构列表

python - 如何在 Python 的 For 循环中添加输入请求的数字?

python - Scikit-learn 不适用于 KNN 上的字符串值

python - 覆盖 Django 表单的默认属性

python - 为什么我应该切换到 Flask 生产部署而不是开发服务器?