Как поменять цвет текста в python

от admin

How to Color Terminal Text in Python

If you’ve ever worked with some fany command-line tools, you might have seen some colored text in there — maybe for a warning or error message or somesuch. It certainly can help in reading comprehension in some situations, so how can we do it in Python?

Specifically, Python 3.8.5 on a Windows 10 machine.

Coloring Terminal Text in Python

The library that is recommended (especially for cross-platform use) is Colorama. This StackOverflow answer suggested its use.

Installing Colorama

Colorama didn’t come pre-installed, but pip saved me:

Coloring ‘print’ Statements Example

This Python 3 snippet will color text for you:

And it produces this output:

Eh… trust me. It’s colored. I cannot figure out how to get that to come through here, but it is I swear!

Coloring ‘input’ Statements Example

If you do something like this:

You do NOT get a red colored question prompt. You get gobbledy-gook at the front and end of the line, but no colors.

The question is, how do you fix this?

Someone suggests this fix:

Sadly, this does not work.

This SO answer suggests a truly confounding fix:

I had to install sphinx with pip to even get it to run. It installed a LOT of stuff. Once that was done, the result was…

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

Всем привет сегодня я хотел рассказать вам «Как сделать цветной вывод текста в Python?» это даже может сделать не опытный человек не имея каких-то знаний. Поэтому если вам интересно то продолжайте читать и тогда все поймете.

C помощью встроенных средств языка

На Python с помощью ANSI-код можно делать цвет, фон и т.д. Это очень мощный и удобный инструмент, с его помощью программист может напрямую определять цвет текста. ANSI коды работают на большинстве дистрибутивов Linux, но не поддерживаются консолью операционной системы Windows до Windows 10.

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

Использовать ANSI коды просто, для этого нужно знать базовый синтаксис и сами коды. Разбор на примере кода «\033[31m\033[43m»:

«033[» — обозначение того, что дальше идет какой-то управляющий цветом код.

37m — это код цвета а именно красный.

43m — это код цвет фона для текста.

Именно через этот ANSI-код мы можем делать текст разноцветным, не забывайте ставить «» иначе будет ошибка.

Давайте сделаем вывод текста на консоле через функции.

Через print() мы задали цвет текста «ПРИВЕТ» синим цветом. Также можно добавить фон и стиль текста все в одну строку.

\033[3m — отвечает за стилб текста в данном случае это курсив.

Цветной вывод текста в 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.

Colorama — A hidden convenience

A beginner’s guide as well as why this python module might require a little bit more love for its simplicity.

TL;DR: This module is used for colouring texts in the terminal when you run your python programs. And I’m going to try to convince you to at least consider whether or not to use ‘colorama’ for your next project.

And honestly, who doesn’t like a little bit of colour!

That said if you’d like to directly jump into using colorama with an easy example, start here!

Humble Beginnings

I stumbled on this python module as I was coding a program for my networks assignment. I didn’t think too much about it until I saw how simple this package was to use.

Back a long time ago when I was a newbie to using the terminal with all its fancy ‘bash’ and ‘vim’, I remember experimenting with the different formatting styles for printing text on the command prompt — text colour, background colour and blinking text. And I remember how dreadful it was to type something really simple in colour.

Not only does it seem like someone just smashed their head onto the keyboard, but every time you might have to go in search for the correct ANSI escape sequences(the weird sequence of characters you see) to get your desired results. And overall, it doesn’t look too pretty. But alas, this is bash! There isn’t much we can do.

Once you go colorama, you never go back around(a)

Now imagine the horror you have to go through if you had to colour your texts in Python. Enter colorama. This module, in my opinion, is the most intuitive and straightforward to use if you want to work with coloured terminal text. Let me show you the simplest way this could help you. I will be using Python3 in all these examples.

It is as simple as that! Colorama also boasts cross-platform compatibility. Author of Colorama, Jonathan Hartley explains in this stackoverflow post…

“…Colorama aims to let Python programs print colored terminal text on all platforms, using the same ANSI codes as described in many other answers on this page. On Windows, Colorama strips these ANSI characters from stdout and converts them into equivalent win32 calls for colored text. On other platforms, Colorama does nothing. Hence you can use ANSI codes, or modules like Termcolor, and with Colorama, they ‘just work’ on all platforms…”

Comparison with other solutions for python

Let's go back to the method we talked about in the beginning, using special escape sequences. You could initialise a dictionary or a class and have a more readable mapping to each of the sequences. I found this example on this stackoverflow post. This gives a much more readable format to your code.

And you can execute your command like this…

Using colorama follows a similar procedure, except obviously, you wouldn’t have to define all the colours.

There exists another module called termcolor. I’m going to let colorama defend itself by showing you how printing a coloured line is done in both termcolor and colorama, and let you judge which one seems more comfortable.

The above snippet is how you can import the modules. The first line will be for termcolor and the second for colorama.

Let's try adding a little bit more colour to our very first program:

How about adding some background colours?

One really good reason to use termcolor is for its text customisation further than just colours — bold, blink, underline and reverse, to name a few. So in its defence, if you’d like to use one of these attributes, termcolor is for you.

Conclusion — A word on simplicity and usage

I honestly don’t have more than a days experience using these modules. I approached them the way a new programmer would, and hopefully, that has helped you to understand why colorama is the best for its simplicity. One of the primary reasons which gravitated me to using colorama is how easy it makes things. Its simplicity will now make me try to use it whenever I feel I can. And I hope you will too.

I must say I haven’t done justice to this module by just showing you how it works, instead of showing real applications. And neither have I talked about the blessings package which also provides a method to format texts on the terminal. My primary focus was to bring this module to programmers who would like a simple way to add a little bit more flair to their programs.

“Simplicity is the ultimate sophistication”

— Leonardo da Vinci

A serious programmer making scripts would ask why one should bother with colours on the terminal. And yes, I can understand that. But I feel if someone is writing a program which is going to be used by many other people — from another programmer to a non-professional, adding a little bit more colour could make prompts more readable, direct attention to important messages in a massive wall of text and soo much more.

I wanted to write this article because there wasn’t a lot of talk about this module on medium. I would highly recommend you to go through the PyPI pages and documentation of these modules and see which amongst these could be the best for you.

EDIT: In light of the Dec. ‘21 Log4j vulnerability, there has been a lot of spotlight on software security, especially on open-source software. If you’re not entirely sure if the advantages of using colorama outweigh the potential disadvantages of using an open-source software, it might be best to stick with any other tried and tested way of colouring texts that would minimize the use of external modules.

Читать:
Антивирус не видит вирус что делать

Related Posts