jenkins 使用getenv加载ansi字符串时,AnsiColor插件不工作

weylhg0b  于 2023-03-29  发布在  Jenkins
关注(0)|答案(1)|浏览(178)

从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:我已经将连接的字符串 Package 在一个变量中,然后用print(str(testOutput))进行字符串化,但这仍然没有成功。

kulphzqa

kulphzqa1#

正如“@mc nd”所述,反斜杠以某种方式转义了输出,而从env导入则没有。所以现在用双反斜杠替换单反斜杠可以工作了。谢谢!!

print(os.getenv('ansiBlue').replace('\\033', '\033') + line + os.getenv('ansiOff').replace('\\033', '\033'));

这将代码的可读性提高了10倍,所以我将替换代码外部化到一个实用程序文件中。

print(util.ansiBlue + line + util.ansiOff);

相关问题