2010-02-24 22 views
28

Mi stavo chiedendo se qualcuno sa come impostare il colore del testo visualizzato nella shell. Ho notato che "ls" utilizza un paio di colori diversi quando si stampano le informazioni sullo schermo (sulla mia macchina Linux), mi chiedevo se potevo approfittarne in Python.Python | cambia il colore del testo nella shell

risposta

52

Utilizzare maledizioni o sequenze di escape ANSI. Prima di iniziare a sputare sequenze di escape, dovresti controllare che lo stdout sia un tty. Puoi farlo con sys.stdout.isatty(). Ecco una funzione tirato da un mio progetto che stampa uscita in rosso o verde, a seconda dello stato, utilizzando sequenze di escape ANSI:

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 in particolare per 'sys.stdout.isatty()' – Nifle

+0

È anche utile avere un override per il caso che l'output non sia un tty, ma vuoi ancora il colore, diciamo che stai solo filtrando le righe con sed o grep –

+0

'unbuffer' può farlo, quindi non sei bloccato se non c'è override. –

5

Tutti i principali codici dei colori sono espressi per https://www.siafoo.net/snippet/88

+2

Il certificato di sicurezza di questo sito Web è scaduto. Qualcuno può verificare che questo sia un sito web sicuro? – BlackVegetable

+1

@BlackVegetable, sì, sembra lo stesso di prima. Inoltre, puoi visualizzarlo [HTTP] (http://www.siafoo.net/snippet/88) se preferisci. Li contatterò per fargli sapere il certificato. –

+0

anche se ci si fida di esso, @BlackVegetable, si ottiene un errore proxy –

4

curses vi permetterà di utilizzare i colori correttamente per il tipo di terminale che viene utilizzato.

-3

Questo è così semplice da fare su un PC: Windows Sistema operativo: Invia il sistema operativo un comando per modificare il testo: import os

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

Imposta il colore globalmente, per l'intero terminale, non per alcuni caratteri su di esso – Helgi

+0

Non funziona affatto nella console di Spyder o nella console di Spyder IPython. – Joooeey

8

ho appena descritto biblioteca molto popolare clint. Che ha più funzioni oltre a colorare l'output sul terminale.

Per il modo in cui supporta i terminali MAC, Linux e Windows.

Ecco l'esempio di usarlo:

Installazione (in Ubuntu)

pip install clint 

per aggiungere colore al qualche stringa

colored.red('red string') 

Esempio: Usando per output a colori (stile comando 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 ... 
Problemi correlati