Python: цветной вывод в терминал

В большинстве современных терминалов можно выводить цветной и стилизованный текст. В Python для этого используют ANSI escape-последовательности или сторонний модуль termcolor.


Что нужно знать


Пример 1: ANSI escape-последовательности

print('\x1b[38;2;5;86;243m' + 'Hello' + '\x1b[0m')

Вывод

Hello

Логика работы видна на схеме:

Разбор ANSI escape-последовательности

Разберём управляющий код \x1b[38;2;5;86;243m:

  • \x1b — служебный escape-символ (то же самое можно записать как \033).

  • 38;2;r;g;b — задаёт цвет в формате RGB. В нашем случае 5;86;243 — синий оттенок.

  • m — указывает на функцию SGR (Select Graphics Rendition), которая отвечает за оформление текста.

После напечатанного текста обязательно ставим \x1b[0m, иначе цвет «протечёт» на следующие строки.


Пример 2: модуль termcolor

from termcolor import colored

print(colored('Hello', 'blue'))

Вывод

Hello

Сторонний модуль termcolor (устанавливается через pip install termcolor) скрывает работу с escape-кодами. В функцию colored() передаются текст и название цвета — этого достаточно, чтобы получить раскрашенный результат.


Как это работает

Терминал распознаёт специальные последовательности символов начиная с \x1b[ и интерпретирует их как команды форматирования: цвет, фон, жирность, подчёркивание. termcolor упрощает запись таких команд за счёт удобного API и поддерживает дополнительные стили (bold, underline и др.).