Как изменить цвет текста в консоли python

Обновлено: 06.07.2024

На мой взгляд, покрытие кода - это хороший способ увидеть, пропустили ли вы какую-либо функциональность, которую вы должны покрыть.

Когда вы проверяете покрытие вручную с помощью его красивой раскраски, можно утверждать, что простые геттеры и сеттеры не нуждаются в проверке (хотя я всегда это делаю).

Когда вы только проверьте процент покрытия кода на свой проект, тогда процент покрытия, равный 80%, не имеет смысла. Вы можете проверить все логические части и забыть некоторые важные части. В этом случае только 100% означает, что вы протестировали весь ваш жизненно важный код (и весь нелогичный код). Как только это 99,9%, вы знаете, что что-то забыли.

Кстати: покрытие кода - это окончательная проверка, чтобы проверить, полностью ли вы тестировали класс. Но 100% охват кода не обязательно означает, что вы действительно протестировали все функциональные возможности этого класса. Поэтому модульные тесты всегда должны выполняться по логике класса. В конце вы запустите покрытие, чтобы узнать, не забыли ли вы что-нибудь. Когда вы сделали это правильно, вы попали на 100% в первый раз.

Еще одно: недавно работая в большом банке в Нидерландах, я заметил, что Sonar указала 100% -ный охват кода. Однако я знал, что чего-то не хватает. Проверяя процент заполнения кода на файл, он указал файл с меньшим процентом. Весь процент кодовой базы был таким большим, что в одном файле процент не отображался как 99,9%. Так что вы можете посмотреть на это .

Это несколько зависит, на какой платформе Вы идете. Наиболее распространенный способ сделать это путем печати escape-последовательностей ANSI. Для простого примера вот некоторый код Python от сценарии сборки блендера :

Для использования кода как это можно сделать что-то как [1 111]

, Это будет работать над unixes включая OS X, Linux и окна (если Вы используете ANSICON, или в Windows 10, если Вы включаете эмуляция VT100 ). Существуют коды ANSI для того, чтобы выбрать цвет, перемещая курсор, и т.д.

, Если Вы собираетесь быть сложными с этим (и это походит, Вы - то, если Вы пишете игру), необходимо изучить модуль "проклятий", который обрабатывает много сложных частей этого для Вас. HowTO Проклятий Python является хорошим введением.

Некоторые современные основанные на тексте программы, такие как "Карликовая Крепость", эмулируют текстовый режим в графическом режиме и используют изображения классического шрифта ПК. Можно найти некоторые из этих битовых массивов, которые можно использовать на , Карликовая крепость Wiki видит ( сделанный пользователем tilesets).

Конкурс Демонстрации Текстового режима имеет больше ресурсов для того, чтобы сделать графику в текстовом режиме.

Хм.. Я думаю, увлекся немного на этом ответе. Я посреди планирования эпической основанной на тексте игры приключения, все же. Удача с Вашим цветным текстом!

Библиотека Colorama позволяет управляющим символам ANSI (используются для создания цветного текста в терминале и позиционирования курсора) работать под MS Windows.

Если вы считаете Colorama полезной, не забудьте поблагодарить ее авторов и сделать пожертвование. Спасибо!

Установка

Описание

Управляющие символы ANSI давно используются для создания цветного текста и позиционирования курсора в терминале на Unix и Mac. Colorama делает возможным их использование на платформе Windows, оборачивая stdout, удаляя найденные ANSI-последовательности (которые будут выглядеть как тарабарщина при выводе) и преобразуя их в соответствующие вызовы win32 для изменения состояния командной строки. На других платформах Colorama ничего не меняет.

В результате мы получаем простой кроссплатформенный API для отображения цветного терминального текста из Python, а также следующий приятный побочный эффект: существующие приложения или библиотеки, использующие ANSI-последовательности для создания цветного вывода на Linux или Mac, теперь могут работать и на Windows, просто вызвав colorama.init().

Альтернативный подход заключается в установке ansi.sys на машины с Windows, что обеспечивает одинаковое поведение для всех приложений, работающих с командной строкой. Colorama предназначена для ситуаций, когда это не так просто (например, может быть, у вашего приложения нет программы установки).

Демо-скрипты в репозитории исходного кода библиотеки выводят небольшой цветной текст, используя последовательности ANSI. Сравните их работу в Gnome-terminal и в Windows Command-Prompt, где отображение осуществляется с помощью Colorama:

ANSI-последовательности на Ubuntu под gnome-terminal
ANSI-последовательности на Windows, используя Colorama

Используем цветной вывод в Python 3

Статьи

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

Введение

ANSI Escape Sequences

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

Возможно, вы видели утилиты командной строки с красочным текстом и индикаторами выполнения. Как мы контролируем представление данных, которые мы выводим на терминал?

Текст окрашивается на вашем терминале на основе ANSI Escape Sequences. Эта статья посвящена ANSI Escape последовательностям, для того чтобы применить цветной вывод.

В терминалах широко используются две цветовые схемы:

  • 16 цветов (8 фоновых + 8 передних)
  • 256 цветов

Давайте начнем раскрашивать наши выходные данные с помощью опции 16 цветов.

Схема 16 цветов в Python

16-цветовая схема состоит из двух наборов по 8 цветов в каждом (8 фонов и 8 передних планов), и они могут быть отображены в терминале с помощью следующего синтаксиса:

16 colors syntax

Давайте проверим эту схему, напечатав цветной узор с красным жирным текстом и желтым фоном. Код стиля для представления полужирного текста равен 2. Цветовые коды для красного текста переднего плана-31 и 43 для желтого фона.

Итак, чтобы получить этот макет, пишем:

Выполните приведенную выше команду в вашем интерпретаторе Python (или в файле).

Вы увидите следующий вывод:

16 colors - example1

Как видно, наш текст перетекает на следующую строчку. Нам нужна точка сброса, чтобы остановить печать цветов.

Это можно сделать, добавив \033[0;0m к строке следующим образом:

Код \033[0;0m представляет собой шаблон сброса, который возвращает терминал обратно в исходную цветовую схему.

Это обеспечит следующий результат:

16 colors - example1

Согласитесь, выглядит намного лучше!

Цветной вывод в Colorama

Давайте установим модуль с помощью pip:

Мы рекомендуем вам установить его в виртуальной среде.

После настройки давайте перейдем к печати цветного текста с помощью Colorama:

Сначала я импортирую функции init, чтобы инициализировать модуль и установить autoreset в True, чтобы нам не пришлось сбрасывать его вручную, Fore (текстовый объект переднего плана), Back (фоновый объект) и Style (объект стиля). Каждый объект имеет свой собственный набор констант, которые могут быть вызваны в функции print.

Шаблон сброса не требуется, так как я установил аргумент autoreset в значение True при инициализации экземпляра.

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

Colorama - example

Схема 256 цветов в Python

С развитием технологий 256-цветовая схема наиболее часто встречается в терминалах. Если вы используете ОС на базе Linux, вы можете проверить цветовую схему, поддерживаемую терминалом, введя следующую команду:

Если эта команда возвращает xterm-256color, то ваш терминал поддерживает максимум 256 цветов.

Интересно, что это за цвета? Вы все узнаете сразу после того, как поймете синтаксис 256-цветовой схемы. Работа с 256 цветами немного отличается от работы с 16-цветовой схемой:

256 colors - syntax

Основываясь на приведенном выше синтаксисе, давайте попробуем воссоздать логотип StackAbuse в Python с помощью последовательности Escape ANSI.

Логотип содержит бледно-серый фон (\033[48;5;236m) со словами: Stack белого цвета (\033[38;5;231m) и Abuse оранжевого цвета (\033[38;5;208m). И конечно, код сброса должен быть встроен в строку.

Тем не менее, мы можем воссоздать логотип с помощью этой последовательности ANSI:

Stack Abuse Logo - in Color

Потрясающе! Какие еще цвета может печатать терминал? Давайте посмотрим, напечатав все 256 цветов, поддерживаемых терминалом:

Этот код содержит две функции, которые печатают переменную, которую вы передаете в них, в соответствующих последовательностях Escape ANSI. Как только я запущу скрипт и передам Х в определенном диапазоне, например (30,38] для 16-цветовой схемы или (0-255] для 256-цветовой схемы, он распечатает индексы в цветах при этих значениях.

Это позволит распечатать обе цветовые схемы в терминале:

Stack Abuse Logo - in Color

Это может быть очень полезно в качестве краткого руководства при создании утилит командной строки.

Заключение

В этом уроке я рассказал, как печатать цветные выходные данные для символов, которые мы отправляем в поток stdout. Я показал, как это сделать с помощью встроенных функций Python, а также как использовать библиотеку Colorama.

Как напечатать цветной текст в Python?

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

Это в некоторой степени зависит от того, на какой платформе вы находитесь. Наиболее распространенный способ сделать это - распечатать escape-последовательности ANSI. В качестве простого примера приведем код Python из скриптов сборки блендера:

Чтобы использовать такой код, вы можете сделать что-то вроде

Это будет работать в Unix, включая OS X, Linux и Windows (при условии, что вы используете ANSICON, или в Windows 10, если вы включили эмуляцию VT100). Существуют коды ansi для настройки цвета, перемещения курсора и многого другого.

Некоторые современные текстовые программы, такие как "Dwarf Fortress", имитируют текстовый режим в графическом режиме и используют изображения классического шрифта для ПК. Вы можете найти некоторые из этих растровых изображений, которые вы можете использовать в Dwarf Fortress Wiki, см. (Пользовательские наборы тайлов).

Демо-конкурс текстового режима содержит больше ресурсов для создания графики в текстовом режиме.

Хм .. Думаю, немного увлекся этим ответом. Однако я занимаюсь планированием эпической текстовой приключенческой игры. Удачи с цветным текстом!

Я удивлен, что никто не упомянул модуль Python termcolor. Использование довольно простое:

Ответ - Colorama для всей кроссплатформенной раскраски в Python.

Пример снимка экрана Python 3.6:


Распечатайте строку, с которой начинается цвет / стиль, затем строку, затем завершите изменение цвета / стиля с помощью '\x1b[0m' :


Получите таблицу параметров формата для текста оболочки со следующим кодом:



Определите строку, начинающуюся с цвета, и строку, завершающую цвет, затем распечатайте текст, указав начальную строку впереди и конечную строку в конце.

Это приводит к следующему в bash , в urxvt с цветовой схемой в стиле Зенберна:


Экспериментируя, мы можем получить больше цветов:

Заметка: \33[5m и \33[6m мигают.

Таким образом мы можем создать полноцветную коллекцию:

Вот код для создания теста:

  • 2 как ты заставил txt мигать
  • 2 Какая оболочка или терминал заставляет мигать?
  • 2 (u) rxvt например
  • 7 Мигающий текст работает очень хорошо. Но как мне это остановить? Все последовательные отпечатки по какой-то причине мигают. Мой терминал думает, что пришло время вечеринки!
  • 5 В конце строки, которая будет мигать, поставьте \33[0m , или же CEND выше.

Вы хотите узнать о escape-последовательностях ANSI. Вот краткий пример:

Для символа блока попробуйте использовать символ Юникода, например \ u2588:

Собираем все вместе:

  • 3 Попробуйте def d(*v): return '\x1B['+';'.join(map(str, v))+'m' тогда print ' '.join([d(k,i)+str(i%10)+d(0) for i in range(30,38)+range(40,48) for k in range(2)])
  • в чем тут сброс?

Я отвечаю, потому что я нашел способ использовать коды ANSI в Windows 10, чтобы вы могли изменять цвет текста без каких-либо модулей, которые не встроены:

Линия, которая делает эту работу, os.system('') или любой другой системный вызов, позволяющий печатать коды ANSI в Терминале:

редактировать: Спасибо @ j-l за поиск еще более короткого метода.

tl; dr: Добавить os.system('') в верхней части файла.

Версия Python: 3.6.7

Мой любимый способ - использовать библиотеку Blessings (полное раскрытие: я ее написал). Например:

Самый надежный способ печатать цветные кирпичи - это печатать пространства с цветами фона. Я использую эту технику, чтобы нарисовать полосу прогресса в прогрессивном режиме:

Вы также можете печатать в определенных местах:

Если в ходе игры вам придется возиться с другими возможностями терминала, вы тоже можете это сделать. Вы можете использовать стандартное форматирование строк Python, чтобы оно было читаемым:

Приятная вещь в Blessings заключается в том, что он делает все возможное, чтобы работать на всех типах терминалов, а не только на (в большинстве своем обычных) ANSI-цветных. Он также сохраняет нечитаемые escape-последовательности из вашего кода, оставаясь лаконичным для использования. Радоваться, веселиться!

  • 66 Использование цвета в качестве имени функции, а не параметра - сомнительная практика.
  • 1 @LtWorf: вы можете легко сделать его параметром, используя getattr если вам это нужно. Или, что более вероятно, вместо этого просто создайте строку формата динамически.
  • 8 @progo тот факт, что вы можете это сделать, не означает, что вы должны это делать. Это более общий вариант, если цвет - это параметр, который вы можете просто передать.
  • 2 Вы can just pass функция Python.
  • 2 Обратите внимание, что импорт благословений не работает в Windows, поэтому не используйте его, если ваш скрипт должен быть кроссплатформенным.

Примеры:


Демо:


сгенерировал класс со всеми цветами, используя цикл for для повторения каждой комбинации цветов до 100, а затем написал класс с цветами Python. Скопируйте и вставьте, как хотите, GPLv2, сделанную мной:

Попробуйте этот простой код

  • 21 Предложение: определите лямбды, которые возвращают эту цветную строку, вместо того, чтобы печатать их напрямую, чтобы их можно было использовать вместе с другими строками.
  • Спасибо @gustafbstron. Вот что я решил использовать: def prGreen: return ''\033[91m <>\033[00m' .format(prt) который используется так: print(f'This will turn and change back')



  • Форматирование очень хорошее, и в нем много цветов. Я все время возвращаюсь к этому, спасибо!
  • очень хорошо, не могли бы вы объяснить мне '\33[38;5;' .
  • 1 @ Джей, это escape-последовательность. '\33' - escape-символ (в восьмеричном формате).
  • Отличное решение на чистом питоне.

Я знаю, что опаздываю. Но у меня есть библиотека под названием colorit. Это очень просто.

Вот некоторые примеры:


Также стоит отметить, что это кроссплатформенный и был протестирован на Mac, Linux и Windows.

Редактировать: colorit теперь доступен для установки с PyPi! Вы можете установить его с помощью pip install color-it в Windows и pip3 install color-it в macOS и Linux.

  • когда будет возможность установить с использованием pip?
  • @ncopiy Привет! Я действительно планирую сделать это в течение следующих двух дней! : D На данный момент вы можете установить его с помощью инструкций по установке на странице.
  • @ncopiy Теперь он доступен для установки с pip3 (или же pip ). Команда pip3 install color-it или же pip install color-it и может быть импортирован с помощью import colorit .
  • Я не знаю почему, но мои тексты не раскрашены цветом, указанным в Color.etc . Все мои тексты превращаются в серые тексты, но с другим тоном (светлее / темнее) .
  • @Victor Хм, если у вас есть init_colorit() заявление где-нибудь, это может быть ваш терминал. Что он делает в других терминалах?

В Windows вы можете использовать модуль win32console (доступен в некоторых дистрибутивах Python) или модуль ctypes (Python 2.5 и выше) для доступа к Win32 API.

Чтобы увидеть полный код, поддерживающий оба способа, см. Отчетный код цветной консоли от Testoob.

Я заключил ответ @joeld в модуль с глобальными функциями, которые я могу использовать в любом месте своего кода.

Используйте следующим образом:

Попробуйте онлайн

Глупо просто на основе ответа @joeld

  • 2 Это приведет к сбою, если вы передадите более одного позиционного аргумента или что-либо, кроме строкового типа
  • @RomainVincent Тогда не передавайте более одного позиционного аргумента или чего-либо другого, кроме строки ty подождите, это print -замены? Возражение отклонено.
  • 1 @ wizzwizz4 Я не совсем понимаю, что вы имели в виду в этом комментарии, я все равно не вижу в этом смысла. Если вы собираетесь предложить класс . для замены такого простого метода, как print, вы также можете не делать его так легко ломающимся. Только мое мнение.
  • 1 @RomainVincent Я собирался сказать, что ваше возражение было неправильным, но для замены такой универсальной функции, как print следует убедиться, что правильно воспроизведена его функциональность.
  • 1 @RomainVincent Реализует использование бесконечных аргументов: <?php def purple(cls, *args, **kwargs): print(cls.PURPLE, *args, cls.END, **kwargs) ?> var13 ->

В Windows вы не можете печатать на консоли с цветами, если вы не используете win32api.

Для Linux это так же просто, как использовать print с escape-последовательностями, описанными здесь:

Чтобы символ печатался как поле, это действительно зависит от того, какой шрифт вы используете для окна консоли. Символ фунта работает хорошо, но это зависит от шрифта:

  • В Windows 10 цвета работают как в Linux, если вы звоните os.system('') в начале вашего кода

В итоге я сделал это, я чувствовал, что это было чистейшим образом:

  • Это действительно хорошо, если вы делаете это без стороннего пакета.


Некоторые обновления color_print с новыми средствами форматирования, например:

Заметка: italic , fast blinking и strikethrough может работать не на всех терминалах, не работает на Mac / Ubuntu.


Вы можете использовать CLINT:

Получите его с GitHub.

  • 1 Первая ссылка исчезла, поэтому я удалил ее; ссылка GH все еще хороша (хотя проект "заархивирован" и в основном заброшен, насколько я могу судить).

обратите внимание, насколько хорошо with Ключевые слова смешиваются с такими модификаторами, которые необходимо сбросить (с использованием Python 3 и Colorama):

  • Пробовал колораму, использовал print(Style.BRIGHT + 'Header Test') и print (Style.DIM + word) чтобы создать действительно красивую подсказку.
  • Это нужно будет изменить, чтобы использовать contextlib для Py3.
  • @cat: Для какой версии Python это потребуется?
  • Я считаю, что 3 и выше - у него должен быть @contextlib.contextmanager декоратор, нет?
  • 1 @cat: Почему? Отлично работает без.

Также запустите это, и вы найдете свой ящик:

Если вы программируете игру, возможно, вы хотите изменить цвет фона и использовать только пробелы? Например:

Если вы используете Windows, то готово!

УРА! другая версия

Хотя я считаю этот ответ полезным, я немного его изменил. этот Github Gist - результат

Применение


кроме того, вы можете обернуть общие обычаи:


Если вы используете Django


(Обычно я использую цветной вывод для отладки на терминале сервера запуска, поэтому добавил его.)

Вы можете проверить, установлен ли он на вашем компьютере:
$ python -c 'import django; print django.VERSION'
Чтобы установить его, проверьте: Как установить Django

Rich - относительно новая библиотека Python для работы с цветом в терминале.

В Rich есть несколько способов работы с цветом. Самый быстрый способ начать - это использовать расширенный метод печати, который отображает синтаксис, подобный bbcode, в управляющие коды ANSI:

Есть и другие способы применения цвета с помощью Rich (регулярное выражение, синтаксис) и связанных функций форматирования.

Читайте также: