2017-10-27 4 views
0

Ich drucke Pass und Fail am Terminal mit Farbe am Terminal und einige Ausgabedatei.Python, um Farbe zu Terminal und auch in Datei

Terminal-Ausgabe:

Parameter    Output     Result 
    ------------    ------------    ------- 
    Timer Enabled   Enabled     Passed 

Dateiausgabe (Eröffnet vim-Editor):

Parameter    Output     Result 
    ------------    ------------    ------- 
    Timer Enabled   Enabled     ^[[92mPassed^[[0m 

In Python I unten Code verwendet:

HEADER = '\033[95m' 
OKBLUE = '\033[94m' 
OKGREEN = '\033[92m' 
WARNING = '\033[93m' 
FAIL = '\033[91m' 
ENDC = '\033[0m' 
BOLD = '\033[1m' 
UNDERLINE = '\033[4m' 

Ausführungs-Code in Linux-Maschine passieren und Datei öffnen wird in Windows-Maschine (Word-Pad oder Notepad ++) und Linux wie Vim-Editor getan.

Jetzt brauche ich Hilfe, wenn ich Datei von Vim oder Windows Word Pad öffnen. Ich möchte keinen Farbcode sehen wie "^ [[92mPassed^[[0m] ist zu hässlich. Könnte jemand mir die besten Möglichkeiten dazu beitragen, die Ergebnisse

+0

Bibliotheken wie [click] (http://click.pooco.org/5/) mit automatisch entfernen ANSI-Codes, wenn die Ausgabe in eine Datei ist. Es bietet auch eine nette Schnittstelle zum Formatieren/Einfärben von Text. – Holloway

Antwort

0

Wenn die Dateiausgabe haft

python script.py > foo.txt 

Sie os.isatty(1) verwenden können, erzeugt zu erreichen (wobei 1 die Datei-Handle für die Standardausgabe ist), um herauszufinden, ob die Ausgabe an ein Terminal angehängt ist (im Gegensatz zu einer Datei). Wenn es an ein Terminal angeschlossen ist, geben Sie die Farbkontrollcodes nicht aus.

Sie können natürlich auch Streifen auch die Steuercodes nach der Tat mit so etwas wie

text = re.sub('\033\\[\d+m', '', text) 
+0

python script.py> foo.txt wieder Farbcode in Datei drucken .. os.isaaty (1) ich verstehe jetzt nicht, ich lese docs und möglicherweise Striping ist eine gute Option –

0
import sys 
class Colors: 
HEADER = '\033[95m' 
OKBLUE = '\033[94m' 
OKGREEN = '\033[92m' 
WARNING = '\033[93m' 
FAIL = '\033[91m' 
ENDC = '\033[0m' 

def disable(self): 
    self.HEADER = '' 
    self.OKBLUE = '' 
    self.OKGREEN = '' 
    self.WARNING = '' 
    self.FAIL = '' 
    self.ENDC = '' 
    # Prints to terminal 
    print (Colors.FAIL + "This is the sample text..." + Colors.ENDC)  
    # Handles text without color code in file. 
    orig_stdout = sys.stdout 
    f = open('out.txt', 'a') 
    sys.stdout = f 
    with open('out.txt', 'w') as f: 
     print (color.FAIL + "This is the sample text..." + color.ENDC) 

color = Colors() 
color.disable() 

disable werden Sie die Ausgabe in einer Datei, ohne dass hässliche Farbcodes erhalten helfen.

Ich habe gerade einen Beispielcode erstellt. Sie können es je nach Bedarf ändern und wiederverwenden.

0

Versuchen colorama Paket in Python für Textfarbe mit & hat Cross-Plattform-Unterstützung für Windows-& Linux. Es kann auch in Verbindung mit vorhandenen ANSI-Bibliotheken wie Termcolor verwendet werden. Dieser Ansatz wäre besser als das manuelle Drucken von ASCII-Sequenzen für die Texteinfärbung auf Terminals.

from colorama import Fore, Back, Style 
    print(Fore.RED + 'Red Text') 
    print(Back.GREEN + 'background in Green') 
    print(Style.DIM + 'Dim Text') 
    print(Style.RESET_ALL) 
    print('Normal Text') 
Verwandte Themen