[Python, Программирование, Совершенный код, Научно-популярное] Разукрашиваем вывод в консоли: теория и практика
Автор
Сообщение
news_bot ®
Стаж: 6 лет 9 месяцев
Сообщений: 27286
Консоль привлекает многих своей минималистичностью и эстетикой, но даже в ней иногда хочется выделить определённый фрагмент, чтобы показать его роль или значимость. Например, отметить зелёным текстом сообщение об успешном выполнении операции или обозначить длинный текст ошибки курсивом. О том, как это делать, а также о реализации на питоне — читайте далее.
Управляющие последовательности ANSI
ANSI escape sequences или Управляющие последовательности ANSI — это стандарт, дающий возможность управлять курсором, цветами, начертание в текстовых консолях. Такие последовательности воспринимаются отрисовщиком терминала, как команды отображать последующий текст в определенном формате. Есть также последовательность, которая сбрасывает предыдущие команды, и отображение текста становиться обычным. Существует несколько форматов управляющих последовательностей, различающихся возможностями и появившимися в разных версиях кодировок. Поговорим об этих форматах подробнее.
8 основных цветов и стили
Для обычного пользователя разнообразия цветов этого формата будет более чем исчерпывающим. Но прежде чем задумываться о том, что терракотовый цвет гораздо круче красного, и он вам уж точно нужен, давайте разберемся, как устроена самая простая версия управляющей последовательности ANSI для форматирования текста.
Чтобы изменить текущий цвет шрифта или фона можно использовать следущий синтаксис:
- Начинается управляющая последовательность с любого из этих трёх представлений: \x1b[ (hex) или \u001b[ (Unicode) или \033[ (oct)
- Далее следуют аргументы, разделённые между собой ;(можно указывать в любом порядке)
- В конце ставится буква m
Возможные аргументы
- Изменения стиля
Модификатор
Код
1
Жирный
2
Блеклый
3
Курсив
4
Подчёркнутый
5
Мигание
9
Зачёркнутый
- Изменения цвета шрифта
Цвет
Код
30
Чёрный
31
Красный
32
Зелёный
33
Жёлтый
34
Синий
35
Фиолетовый
36
Бирюзовый
37
Белый
- Изменения цвета фона
Цвет
Код
40
Чёрный
41
Красный
42
Зелёный
43
Жёлтый
44
Синий
45
Фиолетовый
46
Бирюзовый
47
Белый
Бонус: другие интересные модификаторы, которые могут поддерживаться не всеми платформами
Модификатор
Код
38
RGB цвет (см. раздел "Совсем много цветов")
21
Двойное подчёркивание
51
Обрамлённый
52
Окружённый
53
Надчёркнутый
Пример корректного синтаксиса: \033[3;36;44m. После вывода этой конструкции стиль будет изменён для всего последующего текста. Чтобы вернуться к изначальному состоянию можно использовать \033[0m, тогда весь текст с этого места вернётся к изначальному форматированию.
Давайте поэкспементируем. Для примеров я буду использовать Python.
Важно заметить, что форматирование повлияло и на консоль питона, а не только на ее вывод. Именно поэтому очень важно закрывать все "тэги" изменения форматирования.
Часто используемые сочетания (copy-paste-able)
Код
Описание
\033[0m
вернуться к начальному стилю
\033[31m <your text goes here> \033[0m
красный текст — для обозначения ошибок
\033[1;31m <your text goes here> \033[0m
жирный красный текст — для обозначения критических ошибок
\033[32m <your text goes here> \033[0m
зеленый текст — успешное выполнение
\033[3;31m <your text goes here> \033[0m
красный курсив — текст ошибки
\033[43m <your text goes here> \033[0m
выделение основного, как будто жёлтым маркером
Больше цветов: аж целых 256
Некоторые терминалы поддерживают вывод целых 256 цветов. Если команда echo $TERM выводит xterm-256color, то ваш терминал всё корректно обработает.
В этом формате синтаксис немного другой:
Для генерации кодов цветов можно использовать генератор.
А палитру доступных цветов можно увидеть на картинке ниже.
Палитра цветов
SPL
Совсем много цветов
Этот формат не всегда поддерживается стандартными консолями.
Некотрые будут негодовать: "256 цветов и нет моего любимого терракотового, какой ужас!". Для таких ценителей существует формат, который уже поддерживает 24 битные цвета (3 канала RGB по 256 градаций).
Для не ценителей поясню, что терракотовый кодируется как — (201, 100, 59) или #c9643b.
Синтаксис в этом формате выглядит вот так:
- \033[38;2;⟨r⟩;⟨g⟩;⟨b⟩m — цвет текста
- \033[48;2;⟨r⟩;⟨g⟩;⟨b⟩m — цвет фона
Python: Использование библиотеки Colorama
Библиотека Colorama позволяет форматировать текст, не запоминая коды цветов. Рассмотрим её использование на примере:
from colorama import init, Fore, Back, Style
init()
print(Fore.RED + 'some red text\n' + Back.YELLOW + 'and with a yellow background')
print(Style.DIM + 'and in dim text\n' + Style.RESET_ALL + 'back to normal now')
Вывод программы:
Style позволяет изменить стиль, Fore — цвет шрифта, Back — цвет фона. Использовать переменные из colorama нужно также, как и коды изменения стиля. Но плюс использования библиотеки в том, что Fore.RED более читаем, чем \033[0;31m
Если в colorama.init() указать параметр autoreset=True, то стиль будет автоматически сбрасываться (в конец каждого print будут добавлены сбрасывающие стили последовательности), поэтому вам не придётся об этом каждый раз вспоминать.
А что не так с Windows?
Просто так синтаксис, описанный в начале статьи, не работает в командной строке Windows. Поддержка цветов появлялась постепенно, причём в странном варианте. В начале программы надо сделать системный вызов, активирующий отрисовку цветов. А в более старых версиях необходимо заменить все ANSI последовательности на системные вызовы.
Но colorama.init() сделает всё за вас в большинстве версий Windows. Однако если вы используете другую операционную систему, то функцию init() вызывать в начале программы не обязательно. Также некоторые IDE на Windows (например, PyCharm) тоже поддерживают цвета без каких-либо махинаций.
А еще Windows не поддерживает многие модификаторы, такие как жирный текст. Подробнее можно почитать на странице Colorama
Termcolor
Ещё одна библиотека для вывода цветного текста с более удачным, на мой взлгяд, синтаксисом.
from termcolor import colored, cprint
text = colored('Hello, Habr!', 'red', attrs=['blink'])
print(text)
cprint('Hello, Habr!', 'green', 'on_red')
Кстати, проблему с Windows всё ещё можно починить с помощью colorama.init()
Выводы
Стандартные 8 цветов позволяют разнообразить вывод в консоль и расставить акценты. 256 цветов намного расширяют возможности, хотя и поддерживаются не всеми консолями. Windows, к сожалению, не поддерживает многие основные модификаторы, например, курсив. Также есть некоторые цвета, которые не прописаны в стандартах, но могут поддерживаться вашей операционной системой. Если вы хотите больше цветов, то вы можете поискать их в Гугле.
Пока что не любой терминал поддерживает 24-битные цвета и все модификаторы, но мы вряд ли увидим сильные изменения в этой сфере. Так что пока нам остаётся выбирать самые красивые варианты из тех, что доступны в любимом терминале.
Источники
- Картинки с синтаксисом из статьи
- Генератор из статьи на Хабре
- ANSI escape code
Облачные серверы от Маклауд быстрые и безопасные.
Зарегистрируйтесь по ссылке выше или кликнув на баннер и получите 10% скидку на первый месяц аренды сервера любой конфигурации!
оригинал
===========
Источник:
habr.com
===========
Похожие новости:
- [Научно-популярное] На Земле могут пройти метеоритные дожди из-за редких комет
- [Python, Программирование, Работа с 3D-графикой, Учебный процесс в IT] 3D teeth instance segmentation. В темноте, но не один
- [Графический дизайн, Медийная реклама, Дизайн] Почему вся реклама сегодня выглядят одинаково? (перевод)
- [Программирование микроконтроллеров, Схемотехника] USB на регистрах: isochronous endpoint на примере Audio device
- [Программирование, Анализ и проектирование систем, Хранение данных, Хранилища данных] Транзакции. Часть 2. Конспект книги «Designing Data-Intensive Applications»
- [Open source, Программирование, Геоинформационные сервисы, Визуализация данных, Научно-популярное] Легенды и мифы геофизики
- [Научно-популярное, Космонавтика, Будущее здесь] Unity от Virgin Galactic слетал в космос третий раз
- [Программирование, Звук] Старт в музыкальном программировании — для начинающих достаточно и простого браузера
- [Научно-популярное, Нанотехнологии, Физика] Найдена новая форма углерода толщиной в один атом – и это не графен
- [Научно-популярное, Искусственный интеллект] Археологи обучают ИИ сортировать фрагменты древних горшков
Теги для поиска: #_python, #_programmirovanie (Программирование), #_sovershennyj_kod (Совершенный код), #_nauchnopopuljarnoe (Научно-популярное), #_encoding, #_terminal, #_python, #_color, #_format, #_library, #_vds, #_vps, #_blog_kompanii_maklaud (
Блог компании Маклауд
), #_python, #_programmirovanie (
Программирование
), #_sovershennyj_kod (
Совершенный код
), #_nauchnopopuljarnoe (
Научно-популярное
)
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 14:44
Часовой пояс: UTC + 5
Автор | Сообщение |
---|---|
news_bot ®
Стаж: 6 лет 9 месяцев |
|
Консоль привлекает многих своей минималистичностью и эстетикой, но даже в ней иногда хочется выделить определённый фрагмент, чтобы показать его роль или значимость. Например, отметить зелёным текстом сообщение об успешном выполнении операции или обозначить длинный текст ошибки курсивом. О том, как это делать, а также о реализации на питоне — читайте далее. Управляющие последовательности ANSI ANSI escape sequences или Управляющие последовательности ANSI — это стандарт, дающий возможность управлять курсором, цветами, начертание в текстовых консолях. Такие последовательности воспринимаются отрисовщиком терминала, как команды отображать последующий текст в определенном формате. Есть также последовательность, которая сбрасывает предыдущие команды, и отображение текста становиться обычным. Существует несколько форматов управляющих последовательностей, различающихся возможностями и появившимися в разных версиях кодировок. Поговорим об этих форматах подробнее. 8 основных цветов и стили Для обычного пользователя разнообразия цветов этого формата будет более чем исчерпывающим. Но прежде чем задумываться о том, что терракотовый цвет гораздо круче красного, и он вам уж точно нужен, давайте разберемся, как устроена самая простая версия управляющей последовательности ANSI для форматирования текста. Чтобы изменить текущий цвет шрифта или фона можно использовать следущий синтаксис:
Возможные аргументы
Бонус: другие интересные модификаторы, которые могут поддерживаться не всеми платформами Модификатор Код 38 RGB цвет (см. раздел "Совсем много цветов") 21 Двойное подчёркивание 51 Обрамлённый 52 Окружённый 53 Надчёркнутый Пример корректного синтаксиса: \033[3;36;44m. После вывода этой конструкции стиль будет изменён для всего последующего текста. Чтобы вернуться к изначальному состоянию можно использовать \033[0m, тогда весь текст с этого места вернётся к изначальному форматированию. Давайте поэкспементируем. Для примеров я буду использовать Python. Важно заметить, что форматирование повлияло и на консоль питона, а не только на ее вывод. Именно поэтому очень важно закрывать все "тэги" изменения форматирования. Часто используемые сочетания (copy-paste-able) Код Описание \033[0m вернуться к начальному стилю \033[31m <your text goes here> \033[0m красный текст — для обозначения ошибок \033[1;31m <your text goes here> \033[0m жирный красный текст — для обозначения критических ошибок \033[32m <your text goes here> \033[0m зеленый текст — успешное выполнение \033[3;31m <your text goes here> \033[0m красный курсив — текст ошибки \033[43m <your text goes here> \033[0m выделение основного, как будто жёлтым маркером Больше цветов: аж целых 256 Некоторые терминалы поддерживают вывод целых 256 цветов. Если команда echo $TERM выводит xterm-256color, то ваш терминал всё корректно обработает. В этом формате синтаксис немного другой: Для генерации кодов цветов можно использовать генератор. А палитру доступных цветов можно увидеть на картинке ниже. Палитра цветовSPLСовсем много цветов Этот формат не всегда поддерживается стандартными консолями. Некотрые будут негодовать: "256 цветов и нет моего любимого терракотового, какой ужас!". Для таких ценителей существует формат, который уже поддерживает 24 битные цвета (3 канала RGB по 256 градаций). Для не ценителей поясню, что терракотовый кодируется как — (201, 100, 59) или #c9643b. Синтаксис в этом формате выглядит вот так:
Python: Использование библиотеки Colorama Библиотека Colorama позволяет форматировать текст, не запоминая коды цветов. Рассмотрим её использование на примере: from colorama import init, Fore, Back, Style
init() print(Fore.RED + 'some red text\n' + Back.YELLOW + 'and with a yellow background') print(Style.DIM + 'and in dim text\n' + Style.RESET_ALL + 'back to normal now') Вывод программы: Style позволяет изменить стиль, Fore — цвет шрифта, Back — цвет фона. Использовать переменные из colorama нужно также, как и коды изменения стиля. Но плюс использования библиотеки в том, что Fore.RED более читаем, чем \033[0;31m Если в colorama.init() указать параметр autoreset=True, то стиль будет автоматически сбрасываться (в конец каждого print будут добавлены сбрасывающие стили последовательности), поэтому вам не придётся об этом каждый раз вспоминать. А что не так с Windows? Просто так синтаксис, описанный в начале статьи, не работает в командной строке Windows. Поддержка цветов появлялась постепенно, причём в странном варианте. В начале программы надо сделать системный вызов, активирующий отрисовку цветов. А в более старых версиях необходимо заменить все ANSI последовательности на системные вызовы. Но colorama.init() сделает всё за вас в большинстве версий Windows. Однако если вы используете другую операционную систему, то функцию init() вызывать в начале программы не обязательно. Также некоторые IDE на Windows (например, PyCharm) тоже поддерживают цвета без каких-либо махинаций. А еще Windows не поддерживает многие модификаторы, такие как жирный текст. Подробнее можно почитать на странице Colorama Termcolor Ещё одна библиотека для вывода цветного текста с более удачным, на мой взлгяд, синтаксисом. from termcolor import colored, cprint
text = colored('Hello, Habr!', 'red', attrs=['blink']) print(text) cprint('Hello, Habr!', 'green', 'on_red') Кстати, проблему с Windows всё ещё можно починить с помощью colorama.init() Выводы Стандартные 8 цветов позволяют разнообразить вывод в консоль и расставить акценты. 256 цветов намного расширяют возможности, хотя и поддерживаются не всеми консолями. Windows, к сожалению, не поддерживает многие основные модификаторы, например, курсив. Также есть некоторые цвета, которые не прописаны в стандартах, но могут поддерживаться вашей операционной системой. Если вы хотите больше цветов, то вы можете поискать их в Гугле. Пока что не любой терминал поддерживает 24-битные цвета и все модификаторы, но мы вряд ли увидим сильные изменения в этой сфере. Так что пока нам остаётся выбирать самые красивые варианты из тех, что доступны в любимом терминале. Источники
Облачные серверы от Маклауд быстрые и безопасные. Зарегистрируйтесь по ссылке выше или кликнув на баннер и получите 10% скидку на первый месяц аренды сервера любой конфигурации! оригинал =========== Источник: habr.com =========== Похожие новости:
Блог компании Маклауд ), #_python, #_programmirovanie ( Программирование ), #_sovershennyj_kod ( Совершенный код ), #_nauchnopopuljarnoe ( Научно-популярное ) |
|
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 14:44
Часовой пояс: UTC + 5