当前位置: 首页 > 面试题库 >

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

郭浩穰
2023-03-14
问题内容

是否有与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')






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[然后打印“
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



 类似资料:
  • 问题内容: 如何用Python将彩色文本输出到终端?表示实心块的最佳Unicode符号是什么? 问题答案: 我之所以做出回应,是因为我找到了一种在Windows上使用ANSI代码的方法,这样你就可以更改文本的颜色而无需任何内置模块: 进行此操作的行是,但是要确保如果此人不在Windows上,则不会引起错误,你可以使用以下脚本: 注意:尽管此选项与其他Windows选项具有相同的选项,但是Windo

  • 问题内容: 如何将彩色字符打印到支持它的Linux终端? 如何判断终端是否支持颜色代码? 问题答案: 您需要输出ANSI颜色代码。请注意,并非所有终端都支持此功能。如果不支持颜色序列,则会显示垃圾。 例: 此处是ESC字符ASCII27。其后是,然后是零个或多个数字,以分隔,最后是字母。数字描述从该点开始要切换到的颜色和格式。 前景色和背景色的代码为: 此外,您可以使用以下这些: 请参阅Wikip

  • 问题内容: 如何在Python中将彩色文本输出到终端? 问题答案: 这在某种程度上取决于您所使用的平台。最常见的方法是打印ANSI转义序列。举一个简单的例子,这是Blender构建脚本中的一些python代码: 要使用这样的代码,您可以执行以下操作 或者,使用Python3.6 +: 这将在包括OS X,Linux和Windows的Unix上运行(前提是您使用ANSICON,或者在Windows

  • 问题内容: 我想制作一个在python终端中打印颜色的程序,但我不知道如何。我听说您可以使用某些转义序列将彩色文本打印出来,但是我不确定。如何使用python终端以特定颜色打印字符串? 旁注:我运行的是Linux版本。 问题答案: 尝试该模块。 另外,您可以使用ANSI代码:

  • 问题内容: 我有一个程序可以将内容记录到。 这些日志条目具有关联的“日志级别”(调试,警告,信息等),我希望使用户能够根据日志级别对输出进行着色。 确定是否连接到具有彩色功能的终端的方法是什么?那我该如何用颜色输出文本呢? 我正在寻找仅涉及C或C ++调用的解决方案。我猜(或)可以缓解这种情况,但是我想避免使用它来将依赖关系降到最低。 问题答案: 最简单的检查方法可能是: 如果将您的标准输出发送到

  • 问题内容: 我有一个Python脚本,它利用“打印”来打印到stdout。我最近通过Python Logger添加了日志记录,并希望通过日志记录使这些打印语句进入日志记录器(如果启用了日志记录)。我不想修改或删除这些打印语句。 我可以通过执行’log.info(“ some info msg”)’进行记录。我希望能够做这样的事情: 如果启用了日志记录,则应该像记录log.info(“ test”)