2010-02-24 31 views
28

Me preguntaba si alguien sabe cómo establecer el color del texto que aparece en el shell. Noté que el 'l' usa un par de colores diferentes cuando imprimo información en la pantalla (en mi caja Linux), me preguntaba si podría aprovechar eso en Python.Python | cambiar el color del texto en shell

Respuesta

52

Use Curses o secuencias de escape ANSI. Antes de comenzar a lanzar secuencias de escape, debe verificar que stdout es un tty. Puede hacer esto con sys.stdout.isatty(). He aquí una función sacado de un proyecto mío que imprime la salida en rojo o verde, dependiendo de la situación, usando secuencias de 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 especialmente para 'sys.stdout.isatty()' – Nifle

+0

También es bueno tener una anulación para el caso de que la salida no sea una tty, sino usted todavía quiere el color - digamos que está filtrando líneas con sed o grep –

+0

'unbuffer' puede hacer eso, por lo que no se quedará bloqueado si no hay anulación. –

5

Todos los principales códigos de color se dan en https://www.siafoo.net/snippet/88

+2

El certificado de seguridad de este sitio web ha expirado. ¿Alguien puede verificar que este es un sitio web seguro? – BlackVegetable

+1

@BlackVegetable, sí, parece lo mismo que antes. Además, puede verlo [HTTP] (http://www.siafoo.net/snippet/88) si lo prefiere. Me pondré en contacto con ellos para informarles sobre el certificado. –

+0

aunque confíe en él, @BlackVegetable, obtendrá un error de proxy –

4

curses le permitirá utilizar colores correctamente para el tipo de terminal que se utiliza.

-3

Esto es tan simple de hacer en un PC: Windows OS: Enviar el sistema operativo de un comando para cambiar el texto: import os

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

Esto establece el color global, para todo el terminal, no para algunos caracteres en él. – Helgi

+0

No funciona en absoluto en la consola del spyder o en la consola del espía IPython. – Joooeey

8

acabo de describir biblioteca muy popular clint. Que tiene más características aparte de colorear la salida en la terminal.

Por cierto, admite terminales MAC, Linux y Windows.

Aquí está el ejemplo de su uso:

Instalación (en Ubuntu)

pip install clint 

para añadir color a alguna cadena

colored.red('red string') 

Ejemplo: Uso de salida de color (estilo de 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 ... 
Cuestiones relacionadas