Python windows console color

Цветной вывод текста в Python

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 функций, которые форматируют любой текст в нужный цвет и использовать их во всех своих программах, достаточно лишь импортировать модуль.

Мы меняли только цвет текста, но можно менять и цвет фона, добавлять дополнительные стили. Например, чтобы вывести подчёркнутый текст белого цвета на синем фоне, нужно написать так:

Вот так будет выглядеть вывод:

Обратите внимание на строку 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 в запущенной консоле.

Сделать это можно следующим образом:

Вывод цветного текста в консоль с colorama

Colorama — самая популярная библиотека для вывода цветного текста на Python 3. Colorama позволяет использовать ANSI коды не только в Linux, но и в Windows.

Использование функций и методов библиотеки упрощает написание кода и делает более простым для поддержки. Больше не нужно запоминать или копировать ANSI коды. Команды настолько просты и интуитивно понятны, что с задачей справиться даже обычный пользователь.

Использование сторонней библиотеки, такой как colorama, не приводит к каким-то негативным эффектам. Перед использованием библиотеки colorama, её следует установить с помощью команды в консоле pip install colorama .

Приведём пример использования colorama:

Здесь мы импортировали модули для работы с текстом и фоном. И так же как и раньше мы выводили всё встроенными средствами Python, вывели всё в консоль.

Стоит обратить внимание на функцию init. Если её забыть запустить, то не будет поддерживаться вывод на Windows 10.

Только теперь нам не надо писать \033[44m, а достаточно написать Fore.BLUE, что конечно же удобно. Style.RESET_ALL — это сброс цветов консоли к начальным значениям.

Цветной текст с помощью termcolor

Эта библиотека даёт программисту исчерпывающий инструментарий для работы с цветом текста.

Часто termcolor используют вместе с colorama. Termcolor используют непосредственно для написания кода, действительно, её синтаксис более удобный и простой.

Для установки библиотеки termcolor следует выполнить в консоле команду pip install termcolor .

Здесь мы воспользовались функциями colored и cprint. Первая позволяет создать строку для последующего вывода с необходимыми параметрами цветов и эффектов. Вторая сразу производит вывод в консоль.

Заключение

Если мы делаем пару функций для вывода в консоль цветных сообщений об ошибках и предупреждениях, то можно их сделать и не подключая библиотек. Правда при подключении библиотеки код более читаемым становится.

При выборе между библиотеками colorama и termcolor, я бы остановился бы на colorama. Не только исходя из её большей популярности, но и из-за того, что она поддерживает работу с командной строкой Windows 10. Хотя cprint удобная функция в termcolor.

Python windows console color

The recipe described in this post demonstrates how to write foreground and background colored text in a Windows Command Line with Python and ctypes.

I originally wrote this recipe in the, now defunct, ctypes wiki. The wiki exists only as a read only archive as it has been «spammed to death». I decided to update the corresponding code and to publish it on my personal web site.

ctypes is a foreign function library for Python written by Thomas Heller. It is part of the Python standard library since Python 2.5, but works also with Python 2.3 and 2.4 provided that you download the corresponding libraries available from SourceForge.

Often overlooked on Windows, command line programs are very powerful, but at times, a little boring or simply overwhelming when too much information is displayed at once. Having the ability to change the color and intensity of the text allows to bring contrast to the information output on the screen. for example, UPX (the Ultimate Packer for eXecutables) takes advantage of this concept and it inspired me to introduce this feature into my Python command line programs.

Coloring text in a command line window is not available by default in Python. Using ctypes allows to call the appropriate Win32 library functions, in particular SetConsoleTextAttributes and GetConsoleScreenBufferInfo (see resources for more information on these functions).

Here is a code example showing a simple approach to wrap the SetConsoleTextAttributes and GetConsoleScreenBufferInfo functions:

color_console.py

Using the module above to bring some colors to the Windows console can be achieved in Python 2.6 with the following code:

test_color.py (Python 2.6)

In Python 3.0, some slight changes are necessary and we obtain:

test_color.py (Python 3)

It is possible to write the test code compliant with both Python 2.6 and Python 3.0, but I like to use the natural «Python way» and as such prefer to use the new Python 3.0 features where they are and how they are.

Resources

License

The code available in this post is released under the MIT License.

Как вывести цветной вывод на терминал в Python?

Существует ли какой-либо эквивалент python для perl

Доступно в python?

То, что я хочу, это я должен быть в состоянии установить цвет для всех печатных сообщений, таких как,

Здесь ‘function_print_something’ — это моя функция python, которая будет печатать некоторые отформатированные сообщения журнала на экране.

4 ответов:

Подойдет ли модульPython termcolor ? Это было бы грубым эквивалентом для некоторых применений.

Пример прямо из этого поста, который имеет гораздо больше. Вот часть примера из документов

Специфическим требованием было установить цвет и, предположительно, другие атрибуты терминала, чтобы все последующие отпечатки были такими. в то время как я заявил в первоначальном посте, что это возможно с помощью этого модуля, я теперь так не думаю. Смотрите последний раздел, чтобы узнать, как это сделать. Тем не менее, большую часть времени мы печатаем короткие сегменты текста в цвете, одну или две строки. Поэтому интерфейс в этих примерах может быть лучше, чем «включить» цвет, распечатать, а затем выключить его. (Как показано в Примере Perl.) Возможно, вы можете добавить необязательный аргумент(ы) в свою функцию печати для раскрашивания вывода, а также в функции использовать функции модуля для раскрашивания текста. Это также облегчает решение случайных проблем. конфликты между форматированием и раскраской. Всего лишь мысль. Ниже приведен базовый подход к настройке терминала таким образом, чтобы все следующие отпечатки отображались с заданным цветом, атрибутами или режимом.

Как только соответствующая последовательность ANSI отправляется на терминал, весь следующий текст отображается таким образом. Таким образом, если мы хотим, чтобы весь текст, напечатанный на этом терминале в будущем, был ярким / жирным красным цветом, выведите ESC[ с последующими кодами для атрибута» bright » (1) и красного цвета (31), а затем by m

Чтобы отключить все ранее установленные атрибуты, используйте 0 для атрибута \033[0;35m (magenta).

Для подавления новой строки в python 3 Используйте print(‘. ‘, end=»») . Остальная часть работы заключается в упаковке этого для модульного использования (и для облегчения пищеварения).

Файл colors.py

Я рекомендую быстро прочитать некоторые ссылки на коды. Цвета и атрибуты можно комбинировать, и в этом пакете можно составить хороший список. Один сценарий

Если постоянное использование sys.stdout.write() является проблемой, его можно обернуть в крошечную функцию, или пакет превратится в класс с методами, которые задают поведение терминала (печать кодов ANSI).

Некоторые из вышеизложенного-это скорее предложение посмотреть его, например, сочетание обратного режима и цвета. (Это доступно в модуле Perl, используемом в вопросе, а также чувствительно к порядку и тому подобному.)

Удобный список кодов эвакуации удивительно трудно найти. найти, хотя есть много ссылок на поведение терминала и как его контролировать. СтраницаWiki на ANSI escape codes содержит всю информацию, но требует небольшой работы, чтобы свести ее воедино. Страницы наbash prompt содержат много конкретной полезной информации. Вот еще одна страницас прямыми таблицами кодов. Там есть гораздо больше.

Это может быть использовано вместе с модулем типа termocolor .

Я предлагаю стай. Он похож на colorama, но менее многословен и поддерживает цвета 8bit и 24bit. Вы также можете расширить регистр цветов своими собственными цветами.

Есть несколько библиотек, которые помогают здесь. Для инструментов cmdline я иногда используюcolorama .

Но вместо того, чтобы использовать строки, вы можете использовать перечисление и/или добавить несколько проверок. Не самое красивое решение, но работает на osx/linux и windows и прост в использовании.

Другие темы по этой теме и кросс-платформенной поддержке: например, здесь .

Вы можете попробовать это с python 3:

Если вы используете операционную систему windows, приведенный выше код может не работать для вас. Затем вы можете попробовать этот код:

Читайте также:  Failed windows install change
Оцените статью