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:
O último exemplo pode ser simplificado assim:
Para facilitar, segue a tabela de seqüência de escape ANSI:
1 vermelho = '\033[31m'
2 verde = '\033[32m'
3 azul = '\033[34m'
4
5 ciano = '\033[36m'
6 magenta = '\033[35m'
7 amarelo = '\033[33m'
8 preto = '\033[30m'
9
10 branco = '\033[37m'
11
12 restaura cor original = '\033[0;0m'
13 negrito = '\033[1m'
14 reverso = '\033[2m'
15
16 fundo preto = '\033[40m'
17 fundo vermelho = '\033[41m'
18 fundo verde = '\033[42m'
19 fundo amarelo = '\033[43m'
20 fundo azul = '\033[44m'
21 fundo magenta = '\033[45m'
22 fundo ciano = '\033[46m'
23 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:
1 # -*- coding: utf-8 -*-
2 """
3 0 = Black 1 = Blue 2 = Green
4 3 = Aqua 4 = Red 5 = Purple
5 6 = Yellow 7 = White 8 = Gray
6 9 = Light Blue 10 = Light Green 11 = Light Aqua
7 12 = Light Red 13 = Light Purple 14 = Light Yellow
8
9 Este código é baseado no software Python Wikipedia Bot, distribuído pela MIT license.
10
11 """
12 import ctypes, sys
13
14 def printColorizedInWindows(text, color):
15 std_out_handle = ctypes.windll.kernel32.GetStdHandle(-11)
16 for i in range(0, len(color)):
17 ctypes.windll.kernel32.SetConsoleTextAttribute(std_out_handle, color[i])
18 sys.stdout.write(text)
19 # cor padrão é 7, white
20 ctypes.windll.kernel32.SetConsoleTextAttribute(std_out_handle, 7)
21
22 if __name__ == "__main__":
23 text = u"Imprimindo texto colorido no MS-DOS"
24 color = [1] # número da cor do texto
25 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.
Abaixo o mesmo script porém melhorado pelo amigo Rodrigo Cacilhas que gentilmente o compartilha conosco:
Volta para o CookBook.