在xterm中读取当前文本颜色

2024-05-26 07:45:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在写各种实用程序,我真的很喜欢彩色文本。没什么特别的,只是用转义序列。我创建了一个简单的类,它有一个pprint(msg,color)函数。在找到代码here之后,我让它很容易地工作。

我遇到的问题是我应该能够在打印后关闭颜色。例如,假设一个用户运行我的程序,该程序以默认终端颜色打印几乎所有内容,但有一个错误,我想以红色打印该错误。我在错误消息前面加上“\033[0;32m”,消息是红色的。不幸的是,在我更改之前,所有文本都是红色的。当我的程序运行时,这通常是可以的,因为我知道消息应该是什么颜色的。但是,在我的程序结束后,颜色仍然保持不变。基本上,我想在程序启动时读取当前颜色,并在完成时还原。与退出时脚本还原pwd的方式相同。

如何读取当前转义序列?

系统: 红帽5.x 猛击 Python2.3

谢谢你的帮助。


Tags: 函数代码文本程序实用程序消息here颜色
3条回答
RED = 31
GREEN = 32
ESCAPE = '%s[' % chr(27)
RESET = '%s0m' % ESCAPE
FORMAT = '1;%dm'

def colorize(text, color):
    return ESCAPE + (FORMAT % (color, )) + text + RESET

此函数将返回一个将打印彩色的字符串,随后终端将自动重置。

我不相信那是可能的,如果是的话。最好的方法是发送sgr0,将所有属性重置为默认值(而不是以前的值)。在xterms上,sgr0Esc[m。如果要重置颜色而不影响其他属性,请发送op,xterms上的Esc[39;49m

这些代码不应硬编码。你应该使用terminfo,termcap或[n]咒语。

与其使用模糊的转义序列,不如使用tput工具。以下是我的~/.bashrc中的一段摘录,用于PS1提示:

BLACK=$(tput setaf 0)
RED=$(tput setaf 1)
GREEN=$(tput setaf 2)
YELLOW=$(tput setaf 3)
LIME_YELLOW=$(tput setaf 190)
POWDER_BLUE=$(tput setaf 153)
BLUE=$(tput setaf 4)
MAGENTA=$(tput setaf 5)
CYAN=$(tput setaf 6)
WHITE=$(tput setaf 7)
BRIGHT=$(tput bold)
NORMAL=$(tput sgr0)
BLINK=$(tput blink)
REVERSE=$(tput smso)
UNDERLINE=$(tput smul)

要重置颜色信息,使后续文本为正常的终端颜色,可以将${NORMAL}附加到结尾,如下所示:

echo "${RED}this is red ${NORMAL}this is normal"

相关问题 更多 >