É muito comum administradores de sistemas escreverem scripts para otimizar execução de processos, visualizar resultados de tarefas, monitorar estados dos serviços, etc, onde são geradas algumas saídas para o console. Muita vezes é importante destacar as saídas, como por exemplo, deixar em vermelho os erros, em verde os sucessos, etc, facilitando a análise dos resultados.

É uma situação que as seqüências escapes ANSI podem ajudar. Suportado nas maioria dos terminais, incluindo VT100 (o BTW, console da família de Windows NT não o suporta, mas existe um contorno que será explicado mais a frente).

Para o começar, vamos examinar a estrutura da seqüência de escape ANSI. A seqüência dever sempre começar com o símbolo ESC (código 27 da tabela ASCII) seguindo pela abertura de um ([) colchete. Há um ou mais número separado por (;) ponto-e-vírgula com uma letra na extremidade.

Não descreverei todos os códigos possíveis, qualquer um pode encontrá-los no Wikipédia ou Google. A seqüência com a letra 'm' na extremidade é usada mudar a cor do primeiro plano e a cor do fundo. Em geral é parecido com: ESC [31m, onde o 31 define a cor de primeiro plano (texto) como vermelha.

Segue abaixo uma tabela com códigos suportados na maioria dos terminais:

Código Efeito
0 desativa todos os atributos
1 ativa o modo brilho
4 ativa o modo sublinhado
5 ativa o modo pisca-pisca
7 troca a cor do primeiro plano pela cor de fundo
8 oculta o texto (cor do texto igual ao do fundo)
30 texto na cor preta
31 texto na cor vermelha
32 texto na cor verde
33 texto na cor amarela
34 texto na cor azul
35 texto na cor magenta
36 texto na cor ciano
37 texto na cor branca
39 texto na cor padrão
40 fundo na cor preta
41 fundo na cor vermelha
42 fundo na cor verde
43 fundo na cor amarela
44 fundo na cor azul
45 fundo na cor magenta
46 fundo na cor ciano
47 fundo na cor branca
49 fundo na cor padrão
   

Como você pode observar na tabela, podemos definir a cor do texto e a cor de fundo separadamente ou combiná-las em uma única seqüência, por exemplo: ESC[1;33;44m - amarelo brilhante com fundo azul.

ATENÇÃO: Não esqueça de desativar todos os atributos antes de finalizar, senão todos os textos seguintes serão exibidos com os atributos que você acabou de definir, a não ser que essa seja sua intenção.

Chega de teoria, vamos a parte prática:

Utilizando o IRB vamos executar o seguinte trecho de código:

RUBY:

  1. # Imprimindo uma mensagem de sucesso em verde
  2. puts "Importando categorias [ \e[32mOK\e[0m ]"
  3. # Impriminido uma mensagem de falha em vermelho
  4. puts "Importando tags [\e[31mFALHOU\e[0m]"

Como resultado você obterá:

Resultado do terminal usando cores

Você poderá criar alguns helpers que facilitarão os trabalhos futuros, como exemplo:

RUBY:

  1. def colorize(text, color_code)
  2. "#{color_code}#{text}\e[0m"
  3. end
  4.  
  5. def red(text); colorize(text, "\e[31m"); end
  6. def green(text); colorize(text, "\e[32m"); end
  7.  
  8. # Imprimindo uma mensagem de sucesso em verde
  9. puts "Importando categorias [ #{green('OK')} ]"
  10. # Impriminido uma mensagem de falha em vermelho
  11. puts "Importando tags [#{red('FALHOU')}]"

Recomendo você utilizar desta forma para ser DRY, claro que talvez seja possível melhorar mais ainda, mas este não é objetivo deste post.

Como dito acima, o Windows não suporta seqüências escapes ANSI, mas você pode resolver isso lendo o artigo Command Interpreter Ansi Support, ou com as próprias facilidade do Ruby:

Primeiro instale o win32console:

gem install win32console

Agora adicione o código abaixo no inicio de seu script:

RUBY:

  1. begin
  2. require 'Win32/Console/ANSI' if PLATFORM =~ /win32/
  3. rescue LoadError
  4. raise 'Voce deve instalar o gem win32console para utilizar cores no Windows'
  5. end

Pronto, a saída de seu script será colorida tanto no Windows como no Unix.

Para finalizar, veja a tabela completa com diferentes códigos, a qual você poderá usar em seus scripts:

Tabelas de Cores

A tabela acima pode ser obtida através do script:

RUBY:

  1. #!/usr/bin/ruby
  2.  
  3. [0, 1, 4, 5, 7].each do |attr|
  4. puts '----------------------------------------------------------------'
  5. puts "ESC[#{attr};Texto;Fundo"
  6. 30.upto(37) do |fg|
  7. 40.upto(47) do |bg|
  8. print "\033[#{attr};#{fg};#{bg}m #{fg};#{bg}  "
  9. end
  10. puts "\033[0m"
  11. end
  12. end

Fonte: kpumuk.info

1 estrela2 estrelas3 estrelas4 estrelas5 estrelas (2 votes, average: 4 out of 5)
Loading ... Loading ...

AddThis Social Bookmark Button

Artigos Relacionados:



Comentários

2 Comments so far

  1. Anderson Luiz via Rec6 on Janeiro 1, 2008 1:40 am

    Colorindo a saída do console em Ruby

    Entenda como funciona a seqüência escape ANSI e como utilizá-la para colorir a saída do console, utilizando toda a facilidade de Ruby.

  2. Usuário apeligrini no diHITT on Janeiro 1, 2008 1:43 am

    Colorindo a saída do console em Ruby

    Entenda como funciona a seqüência escape ANSI e como utilizá-la para colorir a saída do console, utilizando toda a facilidade de Ruby.

Name (obrigatório)

Email (obrigatório)

Web Site

Deixe seu comentário

Assine nosso feed


Publicidade





Leitores recentes



Parceiros


Uêba - Os Melhores Links

Trabalhando com Rails


Recomende-me