HOWTO · Python
Texto de color impreso en Python
Este artículo demuestra cómo imprimir texto en color en Python
En esta página
Esta guía explica cómo imprimir texto de colores en una terminal con Python. print() escribe texto en su flujo de salida; las secuencias de escape ANSI incluidas en ese texto solicitan cambios de formato a las terminales que las admiten. Una terminal puede mostrar esas secuencias como colores, mientras que un archivo de registro, un panel de un IDE u otro destino de salida puede mostrar los códigos literalmente. Para consultar los controles de color de fondo y otras funciones de terminal, vea los códigos de escape ANSI y la guía sobre colores en Python.
Cómo funcionan los códigos de color de la terminal
Una secuencia de color ANSI comienza con el carácter de escape (\033) e incluye parámetros numéricos que seleccionan el color del texto, el color de fondo o un estilo. Por ejemplo, \033[31m solicita texto rojo en primer plano y \033[0m solicita restablecer el formato. La terminal interpreta estos caracteres de control; Python no aplica color a la cadena. La compatibilidad depende de la terminal y del destino de salida, por lo que no se garantiza que el texto aparezca en color en todas las consolas o en archivos redirigidos.
Es importante restablecer el formato porque puede seguir activo después de imprimir un mensaje. Si se restablece al final de cada segmento con color, el texto posterior de la misma sesión de terminal no heredará ese formato.
Imprimir texto de colores con códigos de escape ANSI
Define constantes con nombres para poder reutilizar y cambiar fácilmente las secuencias. Este ejemplo autónomo imprime tres mensajes y restablece el formato después de cada uno. Se proporciona el código; aquí no se afirma que se haya ejecutado.
Ejecuta este ejemplo. Los mensajes que muestra el código permanecen en inglés: indican que el archivo se guardó correctamente, preguntan si se desea continuar y avisan de que no se pudo eliminar un registro.
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 el ejemplo, sustituye una constante de color por otra secuencia ANSI compatible. También puedes incluir una secuencia directamente en una cadena o usar un f-string; son formas de dar formato y no cambian qué terminales interpretan la secuencia. El código se puede seleccionar para copiarlo y editarlo.
Usar Colorama para la compatibilidad con Windows
La forma en que se muestran las secuencias ANSI depende del entorno de la terminal. En Windows, colorama puede ayudar a que las aplicaciones que emiten secuencias ANSI funcionen con las consolas compatibles, aunque el comportamiento sigue dependiendo de la consola y del destino de salida. Instala el paquete en el entorno que ejecuta el script con python -m pip install colorama (o python3 -m pip install colorama); son comandos de shell, no instrucciones de Python.
El siguiente ejemplo completo contempla el caso en que el paquete opcional no está instalado. Si está disponible, inicializa Colorama y combina un color de primer plano con un estilo brillante. Este ejemplo no se ha ejecutado aquí, y la rama que depende del paquete requiere que Colorama esté instalado. Los mensajes visibles dentro del código permanecen en inglés: describen cómo instalar el paquete y usan el color del cielo, la hierba y el sol para ilustrar los estilos.
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 proporciona constantes para los colores de primer plano mediante Fore y para los estilos de texto mediante Style. Style.RESET_ALL restablece los estilos ANSI activos; Fore.RESET restablece el color de primer plano. La apariencia concreta varía según la terminal.
Restablecer los colores y otros estilos de la terminal
Para las secuencias ANSI sin una biblioteca, añade un restablecimiento como \033[0m después del texto con color. El ejemplo usa una constante llamada RESET para esa secuencia, de modo que el formato de cada mensaje quede delimitado. Si se omite el restablecimiento, la salida posterior puede conservar el color o estilo seleccionado hasta que otra secuencia lo cambie o la terminal lo restablezca.
Con Colorama, usa Style.RESET_ALL cuando quieras devolver todo el estado del formato a sus valores predeterminados. Fore.RESET solo restablece el color de primer plano; no restablece los demás estilos activos. Elige el restablecimiento que corresponda a los atributos que hayas cambiado y colócalo justo después del texto al que se debe aplicar el formato. Así, los mensajes y las solicitudes posteriores no heredarán estilos de terminal no deseados.