associação pythonbrasil[11] django zope/plone planet Início Logado como (Entrar)

Diferenças para "CoresNoTerminal"

Diferenças entre as versões de 4 e 5
Revisão 4e 2006-04-26 02:25:42
Tamanho: 2832
Comentário:
Revisão 5e 2006-12-20 14:31:44
Tamanho: 3892
Comentário: cores no windows
Deleções são marcadas assim. Adições são marcadas assim.
Linha 7: Linha 7:
== Como faço para alterar a cor de texto no shell (win/linux)? == == Como faço para alterar a cor de texto no shell do Linux? ==
Linha 62: Linha 62:
 Hummm.....

 Se bem me lembro (faz séculos que não mexo com esse ambiente), o
DOS não suporta ANSI diretamente, precisa do diver ANSI.SYS no config.sys
 O DOS não suporta ANSI diretamente, precisa do driver ANSI.SYS no config.sys
Linha 70: Linha 68:
 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.  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

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 de fundo é 7
    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.
Linha 106: Linha 138:

----
Volta para o CookBook.

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:

   1 >>> print '\033[31m'+'Isto eh vermelho'+'\033[0;0m'
   2 Isto eh vermelho
   3 >>> print '\033[32m'+'Isto eh verde'+'\033[0;0m'
   4 Isto eh verde
   5 >>> print '\033[42m'+'\033[1m'+'\033[33m'+'Isto eh amarelo negrito com fundo verde'+'\033[0;0m'
   6 Isto eh amarelo negrito com fundo verde
   7 >>>

O último exemplo pode ser simplificado assim:

   1 >>> print '\033[42;1;33m'+'Isto eh amarelo negrito com fundo verde'+'\033[0;0m'
   2 Isto eh amarelo negrito com fundo verde
   3 >>>

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
  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 de fundo é 7
  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.

   1 #**** cores.py ****
   2 
   3 import string
   4 for letra in ["0","1","2","3","4","5","6","7"]:
   5     for bold in ['',';1']:
   6         for fundo in ["0","1","2","3","4","5","6","7"]:
   7             seq="4" + fundo + ";3" + letra
   8             saida = "\033["+ seq + bold + "m" + string.center(seq+bold, 8) + "\033[m"
   9             print "%s" % saida,
  10         print

Abaixo o mesmo script porém melhorado pelo amigo Rodrigo Cacilhas que gentilmente o compartilha conosco:

   1 #**** cores.py ****
   2 
   3 import sys
   4 
   5 for frente in xrange(8):
   6     for bold in '', ";1":
   7         for fundo in xrange(8):
   8             seq="4%d;3%d%s" % (fundo, frente, bold)
   9             saida = "\033[%sm %s" % (seq, seq.ljust(8))
  10             sys.stdout.write(saida)
  11         sys.stdout.write("\033[0m\n")


Volta para o CookBook.