= Receita de como utilizar cores no terminal = Algumas vezes queremos utilizar cores no terminal e sempre temos que lembrar os códigos complicados das cores, esta página é visa auxiliar nesta tarefa. Esta página surgiu de um post do Marco Carvalho na lista python-brasil@yahoogrupos.com.br , ou seja, todos os créditos a ele. ;) == Como faço para alterar a cor de texto no shell do Linux? == Usando seqüências de escape ANSI: {{{ #!python >>> print '\033[31m'+'Isto eh vermelho'+'\033[0;0m' Isto eh vermelho >>> print '\033[32m'+'Isto eh verde'+'\033[0;0m' Isto eh verde >>> print '\033[42m'+'\033[1m'+'\033[33m'+'Isto eh amarelo negrito com fundo verde'+'\033[0;0m' Isto eh amarelo negrito com fundo verde >>> }}} O último exemplo pode ser simplificado assim: {{{ #!python >>> print '\033[42;1;33m'+'Isto eh amarelo negrito com fundo verde'+'\033[0;0m' Isto eh amarelo negrito com fundo verde >>> }}} Para facilitar, segue a tabela de seqüência de escape ANSI: {{{ #!python vermelho = '\033[31m' verde = '\033[32m' azul = '\033[34m' ciano = '\033[36m' magenta = '\033[35m' amarelo = '\033[33m' preto = '\033[30m' branco = '\033[37m' restaura cor original = '\033[0;0m' negrito = '\033[1m' reverso = '\033[2m' fundo preto = '\033[40m' fundo vermelho = '\033[41m' fundo verde = '\033[42m' fundo amarelo = '\033[43m' fundo azul = '\033[44m' fundo magenta = '\033[45m' fundo ciano = '\033[46m' fundo branco = '\033[47m' }}} == No windows não funciona. Existe alguma maneira? == O DOS não suporta ANSI diretamente, precisa do driver ANSI.SYS no config.sys {{{ device=ANSI.SYS }}} A solução fácil é utilizar o conjunto de funções da biblioteca ctypes disponível no Python 2.5 ou acima, veja o exemplo: {{{ #!python # -*- coding: utf-8 -*- """ 0 = Black 1 = Blue 2 = Green 3 = Aqua 4 = Red 5 = Purple 6 = Yellow 7 = White 8 = Gray 9 = Light Blue 10 = Light Green 11 = Light Aqua 12 = Light Red 13 = Light Purple 14 = Light Yellow Este código é baseado no software Python Wikipedia Bot, distribuído pela MIT license. """ import ctypes, sys def printColorizedInWindows(text, color): std_out_handle = ctypes.windll.kernel32.GetStdHandle(-11) for i in range(0, len(color)): ctypes.windll.kernel32.SetConsoleTextAttribute(std_out_handle, color[i]) sys.stdout.write(text) # cor padrão é 7, white ctypes.windll.kernel32.SetConsoleTextAttribute(std_out_handle, 7) if __name__ == "__main__": text = u"Imprimindo texto colorido no MS-DOS" color = [1] # número da cor do texto printColorizedInWindows(text, color) }}} == Testes == Aproveitando, só de brincadeira, fiz uma conversão (bem porca por sinal) de um [1] script do Aurélio Marinho Jargas (vulgo Verde) que imprime todas as cores ANSI no terminal Linux. {{{ #!python #**** cores.py **** for letra in ["0","1","2","3","4","5","6","7"]: for bold in ['',';1']: for fundo in ["0","1","2","3","4","5","6","7"]: seq="4" + fundo + ";3" + letra saida = "\033["+ seq + bold + "m" + (seq+bold).center(8) + "\033[m" print "%s" % saida, print }}} [1] http://www.dicas-l.com.br/artigos/linux-modotexto/coluna11.html Abaixo o mesmo script porém melhorado pelo amigo Rodrigo Cacilhas que gentilmente o compartilha conosco: {{{ #!python #**** cores.py **** import sys for frente in xrange(8): for bold in '', ";1": for fundo in xrange(8): seq="4%d;3%d%s" % (fundo, frente, bold) saida = "\033[%sm %s" % (seq, seq.ljust(8)) sys.stdout.write(saida) sys.stdout.write("\033[0m\n") }}} ---- Volta para o CookBook.