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

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

宋志学
2023-03-14
问题内容

我有一个程序可以将内容记录到STDOUT

这些日志条目具有关联的“日志级别”(调试,警告,信息等),我希望使用户能够根据日志级别对输出进行着色。

确定是否STDOUT连接到具有彩色功能的终端的方法是什么?那我该如何用颜色输出文本呢?

我正在寻找仅涉及C或C ++调用的解决方案。我猜curses(或ncurses)可以缓解这种情况,但是我想避免使用它来将依赖关系降到最低。


问题答案:

最简单的检查方法可能是:

isatty(fileno(STDOUT))

如果将1您的标准输出发送到任何类型的终端,将返回此值。实际上,任何终端都将支持或忽略VT100颜色代码。除非您希望将其输出到某些非常不寻常的硬件终端,否则无需检查terminfo。(其中大多数都已经几十年了。)

要输出颜色,请使用(扩展的)SGR序列:

"\x1b[%dm"

其中%d是常用颜色的以下值之一:

0: reset colors/style
1: bold
4: underline
30 - 37: black, red, green, yellow, blue, magenta, cyan, and white text
40 - 47: black, red, green, yellow, blue, magenta, cyan, and white background

还有更多的价值,但是这些是最广泛支持的价值。同样,对于这些控制代码来说,检查terminfo基本上是不必要的,因为值得其支持的每个软件终端都将支持(或忽略)它们。

如果需要一次更改多个属性,则可以一次指定所有属性,以分号分隔。例如,以下序列将在绿色背景上用深红色的洋红色文字吸引您的眼球:

"\x1b[1;35;42m"


 类似资料:
  • 问题内容: 是否有与perl相当的python蟒蛇 可用python吗? 我知道解决方案; 我想要的是我应该能够为所有打印消息设置颜色,例如, 这里的“ function_print_something”是我的python函数,它将一些格式化的日志消息打印到屏幕上。 问题答案: 请问Python的termcolor模块呢?对于某些用途,这将是大致等效的。 一个特殊的要求是设置颜色,并可能设置其他终

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

  • 我想在Mac终端中编译C11源代码,但失败了。我尝试了、、和 ,但都没有成功。终端始终读取 。然而, 和类似的东西运行良好(当然,C11源代码无法通过)。 我应该使用哪个选项来打开C 11支持? 顺便说一下,我正在使用的命令行工具安装在Xcode中,我很确定它们是最新的。

  • 我试图使用“cout”将一个整数向量打印到终端,但是在编译过程中我得到一条错误消息: 没有“运算符”的匹配项 代码片段如下所示: 给向量赋值没有错误,只有代码的“cout”部分出错

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

  • 我想用.bat运行一个jar文件(jar文件似乎不想自己打开,但现在这是一个不同的问题),但由于Java文件运行了很长时间,命令提示符仍处于打开状态(而.bat/.jar仍在运行) 我不想这样。 我在某处读到可以使用.cmd文件和以下命令: 若要在没有命令提示符的情况下运行bat文件,请执行以下操作。但那对我不起作用。当我单击.cmd程序时,它只是打开一个命令promopt,并在循环中反复打印“c