HOWTO · Python
Python Imprimir Texto Colorido
Este artigo demonstra como imprimir texto colorido em Python
Nesta página
Este guia mostra como imprimir texto colorido num terminal com Python. print() escreve texto no respetivo fluxo de saída; as sequências de escape ANSI incluídas nesse texto solicitam alterações de formatação a um terminal que as suporte. Um terminal pode apresentar essas sequências como cores, enquanto um ficheiro de registo, um painel de IDE ou outro destino de saída pode mostrar os códigos literalmente. Para conhecer cores de fundo e outros controlos do terminal, consulte sequências de escape ANSI e o guia sobre cores em Python.
Como funcionam os códigos de cor do terminal
Uma sequência de cores ANSI começa com o carácter de escape (\033) e inclui parâmetros numéricos que selecionam uma cor de primeiro plano, uma cor de fundo ou um estilo. Por exemplo, \033[31m solicita texto vermelho em primeiro plano e \033[0m solicita uma reposição. É o terminal que interpreta estes caracteres de controlo; o próprio Python não aplica cor à cadeia de caracteres. O suporte depende do terminal e do destino da saída, por isso não há garantia de que o texto colorido apareça em todas as consolas ou em ficheiros redirecionados.
A reposição é importante porque a formatação do terminal pode continuar ativa depois de uma mensagem ser apresentada. Repor a formatação no fim de cada segmento colorido impede que o texto seguinte, na mesma sessão do terminal, herde essa formatação.
Imprimir texto colorido com códigos de escape ANSI
Defina constantes com nomes para poder reutilizar e alterar facilmente as sequências. Este exemplo autónomo apresenta três mensagens e repõe a formatação após cada uma. É apresentado como código; não se afirma que tenha sido executado.
Execute este exemplo:
O código e os rótulos ou saídas exibidos nesta seção permanecem em inglês.
class Colors:
GREEN = "\033[92m"
YELLOW = "\033[93m"
RED = "\033[91m"
RESET = "\033[0m"
print(Colors.GREEN + "File Saved Successfully!" + Colors.RESET)
print(Colors.YELLOW + "Warning: Are you sure you want to continue?" + Colors.RESET)
print(Colors.RED + "Unable to delete record." + Colors.RESET)
Para adaptar o exemplo, substitua uma constante de cor por outra sequência ANSI suportada. Também pode inserir uma sequência diretamente numa cadeia de caracteres ou usar um f-string; são opções de formatação e não alteram quais os terminais que interpretam a sequência. O código continua disponível para selecionar, copiar e editar.
Usar Colorama para compatibilidade com Windows
A apresentação de ANSI depende do ambiente do terminal. No Windows, colorama pode ajudar aplicações que emitem sequências ANSI a funcionar com consolas compatíveis, mas o comportamento continua a depender da consola e do destino da saída. Instale o pacote no ambiente que executa o script com python -m pip install colorama (ou python3 -m pip install colorama); estes são comandos de shell, não instruções Python.
O exemplo completo seguinte trata de um ambiente em que o pacote opcional não está instalado. Quando está disponível, inicializa Colorama e combina uma cor de primeiro plano com um estilo brilhante. Este exemplo não foi executado aqui, e o ramo que depende do pacote requer que Colorama esteja instalado.
O código e os rótulos ou saídas exibidos nesta seção permanecem em inglês.
try:
import colorama
from colorama import Fore, Style
except ImportError:
print("Install colorama with: python -m pip install colorama")
else:
colorama.init()
print(Fore.BLUE + Style.BRIGHT + "This is the color of the sky" + Style.RESET_ALL)
print(Fore.GREEN + "This is the color of grass" + Style.RESET_ALL)
print(Fore.BLUE + Style.DIM + "This is a dimmer version of the sky" + Style.RESET_ALL)
print(Fore.YELLOW + "This is the color of the sun" + Style.RESET_ALL)
Colorama disponibiliza constantes de primeiro plano através de Fore e estilos de texto através de Style. Style.RESET_ALL repõe os estilos ANSI ativos; Fore.RESET repõe a cor de primeiro plano. O aspeto efetivo varia consoante o terminal.
Repor cores e outros estilos do terminal
Para sequências ANSI diretas, acrescente uma reposição, como \033[0m, depois do texto colorido. O exemplo usa uma constante RESET com nome para essa sequência, mantendo a formatação de cada mensagem autónoma. Se não incluir a reposição, a saída seguinte pode manter a cor ou o estilo selecionado até que outra sequência o altere ou o terminal o reponha.
Com Colorama, use Style.RESET_ALL quando pretender repor todo o estado de formatação para os valores predefinidos. Fore.RESET repõe apenas a cor de primeiro plano; não repõe todos os outros estilos ativos. Escolha a reposição adequada aos atributos que alterou e coloque-a imediatamente após o texto a formatar. Assim, as mensagens e os pedidos seguintes não herdam estilos indesejados do terminal.