Python обладает достаточным количеством инструментов, чтобы выводить текст в консоль в любом цвете. Такой вывод не требует особых навыков, реализуется в несколько строк кода и используется как для выделения важной информации, так и для придания красоты тексту.
Сделать текст цветным можно двумя способами: использовать встроенные средства языка или библиотеки. Каждый способ имеет плюсы и минусы, также существуют нюансы, касающиеся изменения цвета текста в консоли Windows.
C помощью встроенных средств языка
В Python можно форматировать текст с помощью ANSI кодов. Это очень мощный и удобный инструмент, с его помощью программист может напрямую определять цвет текста.
ANSI коды работают на большинстве дистрибутивов Linux, но не поддерживаются консолью операционной системы Windows до Windows 10. В статье есть отдельный пункт про то, как запускать на Windows!
Изменять цвет текста с помощью ANSI кодов можно разными способами, например, использоваться функции или даже написать свой класс-обёртку для ANSI.
Использовать ANSI коды просто, для этого нужно знать базовый синтаксис и сами коды. Разбор на примере кода «\033[31m\033[43m»:
- /033 — обозначение того, что дальше идет какой-то управляющий цветом код;
- [31m — цвет текста (красный);
- [43m — цвет фона (жёлтый).
После вывода этого в консоль, далее выводимая информация будет красного цвета на жёлтом фоне. Сбросить к начальным значениям : \033[0m
.
Базовые коды:
- \033[0-7m — это различные эффекты, такие как подчеркивание, мигание, жирность и так далее;
- \033[30-37m — коды, определяющие цвет текста (черный, красный, зелёный, жёлтый, синий, фиолетовый, сине-голубой, серый);
- \033[40-47m — коды, определяющие цвет фона.
Цвета
Цвет | Текст | Фон |
Чёрный | 30 | 40 |
Красный | 31 | 41 |
Зелёный | 32 | 42 |
Жёлтый | 33 | 43 |
Синий | 34 | 44 |
Фиолетовый | 35 | 45 |
Бирюзовый | 36 | 46 |
Белый | 37 | 47 |
Эффекты
Код | Значение |
0 | Сброс к начальным значениям |
1 | Жирный |
2 | Блёклый |
3 | Курсив |
4 | Подчёркнутый |
5 | Редкое мигание |
6 | Частое мигание |
7 | Смена цвета фона с цветом текста |
Функции для вызова
Быстро покрасить строку в нужный цвет можно с помощью функций. Им нужно дать говорящие имена, передать в качестве аргумента строку и использовать в их теле правильный ANSI код.
Подход удобен тем, что можно объявить N функций, которые форматируют любой текст в нужный цвет и использовать их во всех своих программах, достаточно лишь импортировать модуль.
Например, так:
Код:
def out_red(text): print("\033[31m {}" .format(text)) def out_yellow(text): print("\033[33m {}" .format(text)) def out_blue(text): print("\033[34m {}" .format(text)) out_red("Вывод красным цветом") out_yellow("Текст жёлтого цвета") out_blue("Синий текст")
Результат:
Мы меняли только цвет текста, но можно менять и цвет фона, добавлять дополнительные стили. Например, чтобы вывести подчёркнутый текст белого цвета на синем фоне, нужно написать так:
print("\033[4m\033[37m\033[44m{}\033[0m".format("Python 3"))
Вот так будет выглядеть вывод:
Обратите внимание на строку print("\033[4m\033[37m\033[44m{}\033[0m".format("Python 3"))
.
Здесь мы вывод осуществляли следующим образом:
- \033[4m — подчёркнутый;
- \033[37m — белая надпись;
- \033[44m — синий фон;
- {} — заменится на «Python 3»;
- \033[0m — сброс к начальным значениям.
Как вывести цветной текст в консоль на Windows
В Linux по умолчанию встроена поддержка ANSI кодов консолью, а в Windows — нет. Это объясняется тем, что для линукса консоль является основным рабочим инструментом. В Windows консоль используется редко, поэтому нет смысла встраивать в неё подобные вещи.
Однако в Windows 10, начиная с версии Threshold 2, разработчики добавили в консоль поддержку управляющих кодов. Однако из-за того, что далеко не все пользуются новой ОС, писать консольные приложения с цветным текстом все ещё приходится с помощью дополнительных библиотек.
Для того, чтобы код, написанный с помощью внутренних средств Python 3 или с помощью библиотеки termcolor заработал в Windows 10, надо включить поддержку ANSI для stdout в запущенной консоле.
Сделать это можно следующим образом:
import ctypes kernel32 = ctypes.windll.kernel32 kernel32.SetConsoleMode(kernel32.GetStdHandle(-11), 7)
Вывод цветного текста в консоль с colorama
Colorama — самая популярная библиотека для вывода цветного текста на Python 3. Colorama позволяет использовать ANSI коды не только в Linux, но и в Windows.
Использование функций и методов библиотеки упрощает написание кода и делает более простым для поддержки. Больше не нужно запоминать или копировать ANSI коды. Команды настолько просты и интуитивно понятны, что с задачей справиться даже обычный пользователь.
Использование сторонней библиотеки, такой как colorama, не приводит к каким-то негативным эффектам. Перед использованием библиотеки colorama, её следует установить с помощью команды в консоле pip install colorama
.
Приведём пример использования colorama:
import colorama from colorama import Fore, Back, Style colorama.init() print(Fore.RED + 'Красный текст') print(Back.BLUE + 'Синий фон') print(Style.RESET_ALL) print('Снова обычный текст')
Здесь мы импортировали модули для работы с текстом и фоном. И так же как и раньше мы выводили всё встроенными средствами Python, вывели всё в консоль.
Стоит обратить внимание на функцию init. Если её забыть запустить, то не будет поддерживаться вывод на Windows 10.
Только теперь нам не надо писать \033[44m, а достаточно написать Fore.BLUE, что конечно же удобно. Style.RESET_ALL — это сброс цветов консоли к начальным значениям.
Результат:
Цветной текст с помощью termcolor
Эта библиотека даёт программисту исчерпывающий инструментарий для работы с цветом текста.
Часто termcolor используют вместе с colorama. Termcolor используют непосредственно для написания кода, действительно, её синтаксис более удобный и простой.
Для установки библиотеки termcolor следует выполнить в консоле команду pip install termcolor
.
Пример:
from termcolor import colored, cprint print(colored('Привет мир!', 'red', attrs=['underline'])) print('Привет, я люблю тебя!') cprint('Вывод с помощью cprint', 'green', 'on_blue')
Здесь мы воспользовались функциями colored и cprint. Первая позволяет создать строку для последующего вывода с необходимыми параметрами цветов и эффектов. Вторая сразу производит вывод в консоль.
Результат:
Заключение
Если мы делаем пару функций для вывода в консоль цветных сообщений об ошибках и предупреждениях, то можно их сделать и не подключая библиотек. Правда при подключении библиотеки код более читаемым становится.
При выборе между библиотеками colorama и termcolor, я бы остановился бы на colorama. Не только исходя из её большей популярности, но и из-за того, что она поддерживает работу с командной строкой Windows 10. Хотя cprint удобная функция в termcolor.