2017-02-15 4 views
3

Die übliche Regel für Apps, die Konsolenfarben unterstützen, besteht darin, sie zu aktivieren, wenn die aktuelle Konsole ein TTY ist.Wie erkennt man eine Pseudokonsole in Python, um die Farbgebung zu aktivieren?

Diese Methode bricht auf Servern mit kontinuierlicher Integration (wie Jenkins, Travis, ...), weil sie kein TTY für ihre Pseudokonsole öffnen.

Ich frage mich, ob es möglich ist, zwischen diesen beiden Fällen zu unterscheiden:

  • mycommand Lauf unter Jenkins - wir Färbung
  • mycommand >> output.log aktivieren wollen - wir wollen nicht mit ANSI am Ende Escapes in der Protokolldatei.

Mein alter ANSI Erkennungscode:

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 

Kann ich verbessern dies, um dieses Problem zu lösen?

Antwort

2

Da Sie bereits die Umgebungsvariable PYCHARM_HOSTED verwenden, schlage ich vor, dass Sie etwas ähnliches für Ihre CI-Umgebung verwenden. Sie haben speziell Jenkins und Travis erwähnt. Beide Systeme setzen Umgebungsvariablen, die verwendet werden können. Einige Möglichkeiten sind ...

Jenkins Umgebungsvariablen:

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 Umgebungsvariablen:

CI=true 
TRAVIS=true 
CONTINUOUS_INTEGRATION=true 

(Source)

Verwandte Themen