AnsiColor 插件在使用 getenv 加载 ansi 字符串时不起作用

问题描述 投票:0回答:1

从 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)) 进行字符串化,但这仍然没有成功..

python string batch-file jenkins ansi-escape
1个回答
0
投票

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

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

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

print(util.ansiBlue + line + util.ansiOff);
© www.soinside.com 2019 - 2024. All rights reserved.