从 python 字符串设置颜色就像一个魅力。这是我的 python 脚本中的一个工作片段:
line = "All Tests OK."
print('\033[31m \033[1m' + line + '\033[0m');
这导致 colored Jenkins 控制台输出如下:
All Tests OK.
从代码中提取 ANSI 字符串:
为了提高代码的可读性,我想将颜色字符串和转义序列移动到全局配置文件中。所以我有我的 build.conf.bat 批处理文件,它有一堆构建环境的全局设置,它包括 5 个 ansiColor 变量,如下所示:
set ansiBlue=\033[34m
set ansiRed=...
在 Python 脚本中,我可以通过使用访问所有这些环境变量
print(os.getenv('ansiBlue') + " " + line + os.getenv('ansiOff'))
这将返回一个带有 ANSI 代码的字符串,如批处理配置文件中所定义。 直到这里,一切都很好,但是当 Jenkins 运行构建时,控制台输出是这样的:
\033[34m All Tests OK. \033[0m
因此,手动创建的字符串有效,但变量中的字符串无效。为什么? 所以我的问题是,我该怎么做才能使这些变量在 Jenkins 控制台输出中起作用?
--
PS:我已经将连接的字符串包装在一个变量中,然后用 print(str(testOutput)) 进行字符串化,但这仍然没有成功..
正如“@mc nd”所述,反斜杠以某种方式转义了输出,而从 env 导入的却没有。所以现在用双反斜杠替换单反斜杠就可以了。谢谢!!
print(os.getenv('ansiBlue').replace('\\033', '\033') + line + os.getenv('ansiOff').replace('\\033', '\033'));
这将代码的可读性提高了负十倍。所以我将替换代码外部化到一个实用程序文件中。
print(util.ansiBlue + line + util.ansiOff);