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

时间:2017-05-31 11:35:46

标签: python string batch-file jenkins ansi

从python字符串设置颜色就像魅力一样。这是我的python脚本的一个工作片段:

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

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

1 个答案:

答案 0 :(得分:0)

如#34; @mc nd"所述反斜杠以某种方式逃脱输出,而env的导入没有。因此,用双反斜杠替换单反斜杠现在就可以了。谢谢!

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

这提高了代码的可读性,减去因子减去十。所以我将替换代码外部化为实用程序文件。

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