2010-02-24 11 views
28

Zastanawiam się, czy ktoś wie, jak ustawić kolor tekstu, który pojawia się w powłoce. Zauważyłem, że "ls" używa kilku różnych kolorów podczas drukowania informacji na ekranie (na moim komputerze z Linuksem), zastanawiałem się, czy mógłbym to wykorzystać w Pythonie.Python | zmień kolor tekstu w powłoce

Odpowiedz

52

Użyj sekwencji ucieczek lub sekwencji ANSI. Zanim zaczniesz wydobywać sekwencje ucieczki, powinieneś sprawdzić, czy stdout jest tty. Możesz to zrobić za pomocą sys.stdout.isatty(). Oto funkcja wyciągnął z projektu kopalni, która drukuje wyjście na czerwony lub zielony, w zależności od stanu, stosując sekwencje ANSI Escape:

def hilite(string, status, bold): 
    attr = [] 
    if status: 
     # green 
     attr.append('32') 
    else: 
     # red 
     attr.append('31') 
    if bold: 
     attr.append('1') 
    return '\x1b[%sm%s\x1b[0m' % (';'.join(attr), string) 
+13

+1, szczególnie dla 'sys.stdout.isatty()' – Nifle

+0

Miło jest mieć także przesłonięcie dla sprawy, że wyjście nie jest tty, ale nadal chcesz tego koloru - powiedzmy, że filtrujesz linie tylko za pomocą sed lub grep –

+0

'unbuffer' może to zrobić, więc nie utkniesz, jeśli nie ma żadnego nadpisania. –

5

Wszystkie główne kody kolorów podane są w https://www.siafoo.net/snippet/88

+2

Certyfikat bezpieczeństwa tej witryny wygasł. Czy ktokolwiek może zweryfikować, czy jest to bezpieczna witryna? – BlackVegetable

+1

@BlackVegetable, tak, wygląda tak samo jak wcześniej. Możesz także wyświetlić [HTTP] (http://www.siafoo.net/snippet/88), jeśli wolisz. Skontaktuję się z nimi, aby poinformować ich o certyfikacie. –

+0

nawet jeśli mu ufasz, @BlackVegetable, otrzymujesz błąd serwera proxy –

4

curses pozwoli prawidłowo używać kolorów dla danego typu terminala, który jest używany.

-3

To jest tak proste do zrobienia na PC: Windows OS: Wyślij OS polecenie, aby zmienić tekst: import os

os.system('color a') #green text 
print 'I like green' 
raw_input('do you?') 
+5

Powoduje ustawienie koloru globalnie dla całego terminala, a nie dla niektórych znaków na nim – Helgi

+0

Nie działa w ogóle w konsoli spydera lub konsoli IPython. – Joooeey

8

właśnie opisane bardzo popularną bibliotekę clint. Który ma więcej funkcji oprócz barwienia wyjścia na terminalu.

Przy okazji obsługuje terminale MAC, Linux i Windows.

Oto przykład z użyciem:

Instalacja (Ubuntu)

pip install clint 

celu dodania koloru do sznurek

colored.red('red string') 

Przykładowe zastosowanie do kolor wyjściowy (styl polecenia django)

from django.core.management.base import BaseCommand 
from clint.textui import colored 


class Command(BaseCommand): 
    args = '' 
    help = 'Starting my own django long process. Use ' + colored.red('<Ctrl>+c') + ' to break.' 

    def handle(self, *args, **options): 
     self.stdout.write('Starting the process (Use ' + colored.red('<Ctrl>+c') + ' to break)..') 
     # ... Rest of my command code ... 
Powiązane problemy