我正在实现一个Python控制台应用程序,该应用程序使用ANSI转义码来着色各种颜色。我使用Pop OS(Ubuntu衍生产品)进行开发,并且按设计进行着色。
我刚刚在Centos机器上试用了该应用程序,虽然颜色正确显示,但是在彩色文本周围还有其他文本(包含数字的小盒子,垂直堆叠),显然与转义码相对应。
所有转义代码均在此Python代码中指定:
style = ('\033[1m\033[3m' if bold and italic else
'\033[1m' if bold else
'\033[3m' if italic else
'\033[0m')
return f'\001{style}\002\001\033[38;5;{color.code}m\002{s}\001\033[0m\002'
(我正在研究的项目是https://github.com/geophile/marcel,上面的代码来自marcel.util.colorize()。)
真正奇怪的是,在某些情况下,多余的字符不存在,而在其他情况下则存在。另外,如果我从pop os机器切换到centos机器,则在所有情况下文本均正确着色。
是什么解释了这种行为差异-.bashrc中的某些内容?关于X的配置?
答案 0 :(得分:0)
\002
不是“ ANSI”转义码。某些程序(而不是 terminals )可能会解释它,并且根据字符串的使用方式,可能会绕过打算处理的程序多余的逃生。 (当然,某些 terminals 可能会为 002
等提供自己的解释,但是,除了源代码之外,您不太可能在任何地方找到记录的文档。 )。