2017-02-15 27 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)

Travis Переменные окружения:

CI=true 
TRAVIS=true 
CONTINUOUS_INTEGRATION=true 

(Source)