支持控制台着色的应用程序的通常规则是在当前控制台是TTY时激活它。
此方法破坏了连续集成服务器(例如Jenkins,Travis,...),因为它们没有为其伪孔打开TTY。
我想知道是否可以区分这两种情况:
-
mycommand
在Jenkins下运行 - 我们要启用着色 -
mycommand >> output.log
-我们不想最终在日志文件中获得ANSI Escapes。
我的旧ANSI检测代码:
import sys
import os
if (hasattr(sys.stderr, "isatty") and sys.stderr.isatty()) or
('TERM' in os.environ.keys() and os.environ['TERM'] in ['linux']) or
('PYCHARM_HOSTED' in os.environ.keys()):
coloring = True
我可以改进此问题以解决这个问题吗?
由于您已经在使用环境变量PYCHARM_HOSTED
,因此我建议您在CI环境中使用类似的东西。您特别提到了詹金斯和特拉维斯。这两个系统都设置了可以使用的环境变量。一些可能性是...
Jenkins环境变量:
JENKINS_URL Set to the URL of the Jenkins master that's running the build.
BUILD_URL The URL where the results of this build can be found.
BUILD_TAG String of jenkins-${JOB_NAME}-${BUILD_NUMBER}.
(源)
travis环境变量:
CI=true
TRAVIS=true
CONTINUOUS_INTEGRATION=true
(源)