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

问题描述:

从python字符串设置颜色就像一个魅力。这里是我的Python脚本工作片段:当ansi字符串加载getenv时AnsiColor插件不起作用

line = "All Tests OK." 
print('\033[31m \033[1m' + line + '\033[0m'); 

这导致有色詹金斯控制台输出是这样的:

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代码,在批处理配置文件中定义。 直到这里,一切都很好,但是当詹金斯运行构建,控制台输出是这样的:

\033[34m All Tests OK. \033[0m 

所以,手动创建的字符串的工作,但是从变量字符串不工作。为什么? 所以我的问题是,我能做些什么来使这些变量在Jenkins控制台输出中工作?

-

PS:我已经包裹在一个变量concatonated字符串,然后用打印(STR(testOutput))字符串化,但是这仍然没有成功..

+2

Python的解析器转换'\ 033'一个转义字符,但批量解析器不这样做翻译,让你的'os.getenv'读取一个反斜杠和三个数字。也许像(对不起,python不是我的区域)'os.getenv('ansiBlue')。replace('\\ 033','\ 033')'可以解决你的问题。 –

+0

'replace'应该可以工作,或者一般来说,对于Latin-1源文本,您可以使用'codecs.decode(source_string,'unicode_escape')'。 – eryksun

+0

感谢球员,与replace()的提示工作,虽然我从来没有看到输出中的双反斜杠。 – domih

如前所述通过“@ mc nd”反斜线以某种方式转义输出,并且从env导入没有。所以用双反斜杠代替单反斜杠现在就可以工作。谢谢!!

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

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

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