2010-02-24 5 views
28

Je me demandais si quelqu'un sait comment définir la couleur du texte qui apparaît dans le shell. J'ai remarqué que le 'ls' utilise deux couleurs différentes lors de l'impression des informations à l'écran (sur ma machine Linux), je me demandais si je pouvais en profiter en Python.Python | changer la couleur du texte dans la coquille

Répondre

52

Utiliser des curseurs ou des séquences d'échappement ANSI. Avant de commencer à générer des séquences d'échappement, vous devez vérifier que stdout est un tty. Vous pouvez le faire avec sys.stdout.isatty(). Voici une fonction tirée d'un projet de mine qui imprime la sortie en rouge ou vert, en fonction de l'état, en utilisant des séquences d'échappement 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 en particulier pour 'sys.stdout.isatty()' – Nifle

+0

Il est également bon d'avoir un remplacement pour le cas où la sortie n'est pas un tty, mais vous voulez toujours la couleur - disons que vous êtes juste en train de filtrer les lignes avec sed ou grep –

+0

'unbuffer' peut le faire, donc vous n'êtes pas bloqué s'il n'y a pas de remplacement. –

5

Tous les principaux codes de couleur sont donnés à https://www.siafoo.net/snippet/88

+2

Le certificat de sécurité de ce site Web a expiré. Quelqu'un peut-il vérifier que c'est un site Web sécurisé? – BlackVegetable

+1

@BlackVegetable, oui, il ressemble à la fois avant. En outre, vous pouvez le voir [HTTP] (http://www.siafoo.net/snippet/88) si vous préférez. Je les contacterai pour les informer du certificat. –

+0

même si vous lui faites confiance, @BlackVegetable, vous obtenez une erreur de proxy –

4

curses vous permettra d'utiliser des couleurs correctement pour le type de terminal qui est utilisé.

-3

Ceci est si simple à faire sur PC: Windows OS: Envoyer l'os une commande pour modifier le texte: import os

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

Ceci définit la couleur globalement, pour tout le terminal, pas pour certains caractères – Helgi

+0

Ne fonctionne pas du tout dans la console spyder ou spyder console IPython. – Joooeey

8

je viens de décrire la bibliothèque très populaire clint. Qui a plus de fonctionnalités à part de colorer la sortie sur le terminal. Par ailleurs, il prend en charge les terminaux MAC, Linux et Windows.

Voici l'exemple de l'utiliser:

Installation (Ubuntu)

pip install clint 

Pour ajouter la couleur à une chaîne

colored.red('red string') 

Exemple: Utilisation pour sortie couleur (style de commande 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 ... 
Questions connexes