2017-02-15 111 views
3

支持控制台着色的应用程序的通常规则是在当前控制台是TTY时激活它。如何在Python中检测伪控制台以激活着色?

这种方法打破了持续集成服务器(如Jenkins,Travis,...),因为它们没有为其伪控制台打开TTY。

我想知道是否有可能这两种情况之间进行区分:詹金斯下

  • mycommand运行 - 我们要启用着色
  • mycommand >> output.log - 我们不希望与ANSI落得在日志文件中转义。

我的老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 

我可以为了解决这个问题提高呢?

回答

2

既然您已经在使用环境变量PYCHARM_HOSTED,我建议您为您的CI环境使用类似的东西。你特别提到了詹金斯和特拉维斯。这两个系统都设置了可以使用的环境变量。一些可能性是......

詹金斯环境变量:

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}. 

Source

特拉维斯环境变量:

CI=true 
TRAVIS=true 
CONTINUOUS_INTEGRATION=true 

Source