Как отобразить цветной «черный» в командной строке

Python

1. Введение

Большинство программистов привыкли к скучному черно-белому тексту в командной строке, и первая строка кода на любом языке программирования должна научить нас, как вывести строку на стандартный вывод (терминал командной строки или консоль в большинстве случаев). ), в котором говорится: «Все, что черное или нет. Белоеhello world!. Так много «больших парней», которые не разбираются в программировании, думают, что программисты странные, весь день смотрят в черный экран, стучат и стучат вслепую, и что они как сокровище. Тогда эта статья расскажет вам о том, что это не просто черный экран, он тоже может быть красочным и ярким. . . Хахаха. . . На картинке ниже показан окончательный эффект от этой статьи, опубликованной заранее, чтобы показать, что я не дую 🐂B.

2. Управляющие последовательности ANSI

Чтобы отображать цветной текст на терминале командной строки, похожем на черно-белый телевизор, вы должны знать механизм его реализации, то есть устанавливать атрибуты текста и цвета.ANSI 转义序列.

2.1 Что такое escape-последовательности ANSI?

Управляющие последовательности ANSI в некоторых местах также называются управляющими кодами ANSI. Это последовательность символов ASCII, используемая для изменения отображения графики и управления движением курсора в терминале командной строки.

Его первые два символа фиксируются как:

  • escape-символEscкод ASCII составляет 27 (Hex:0x1b)
  • символ левой скобки[, код ASCII — 91 (шестнадцатеричный:0x5b)

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

2.2 Используйте escape-последовательности ANSI для установки режима отображения графики

формат (обратите внимание, что символmокончание):

Esc[Value;...;Valuem

Поддерживаемые параметры режима отображения содержат свойства текста, цвета переднего плана и фона.

2.2.1 Свойства текста

Value текстовый атрибут
0 сбросить все свойства
1 Смелый
4 подчеркивать
5 текст мигает
7 обратный дисплей
8 Спрятать

2.2.2 Цвет переднего плана

Value цвет
30 чернить
31 красный
32 зеленый
33 Желтый
34 Синий
35 пурпурный
36 зеленый
37 белый

2.2.3 Цвет фона

Value цвет
40 чернить
41 красный
42 зеленый
43 Желтый
44 Синий
45 пурпурный
46 зеленый
47 белый

3. Реализация Python

Понимая, как работают управляющие последовательности ANSI, можно отображать цвета текста и фона разными цветами в терминале командной строки, используя любой язык программирования. Взяв в качестве примера Python, обычно мы используемprint()Функция, проходящая в строке, будет распечатать знакомые черно-белые символы к стандартному выводу, но если вы добавляете escape Asceence, которые управляют дисплеем перед входящей строкой, она может отображаться в соответствии с режимом отображения. Отказ

3.1 Использование print() для печати управляющих последовательностей ANSI

Мы передаем его в print()ANSI 转义序列 + 要显示的字符串способ управления режимом отображения текста. должен быть в курсеANSI 转义序列первый персонаж изEscявляется непечатаемым символом, нам нужно представить его в виде escape-символов юникода,EscЮникод представление\u001b; Также установите режим отображения изображения, не забудьтеANSI 转义序列персонаж в концеm,можетmДумайте об этом как о последовательности, которая управляет режимом отображения и разделителем отображаемого текста.

Показать красный «привет, мир!»:

print("\u001b[31m hello world!")

3.2 Установите атрибут текста + цвет переднего плана + цвет фона одновременно

из предыдущего режима графического отображенияANSI 转义序列Из формата видно, что одновременно поддерживаются несколько настроек.Value, несколькоValueРазделяйте точкой с запятой. Цвета переднего плана и фона одного цвета из-за свойствValueвсе разные, поэтому порядок их установки не требуется. Например, отображение «hello world!» мигающим белым цветом на зеленом фоне.

print("\u001b[42;37;5m hello world!")

3.3 Сбросить все свойства

Внимательный читатель должен заметить, что до тех пор, пока не будет установлено новое свойство отображения, ранее установленное свойство останется, даже приглашение командной строки будет затронуто. Затем, чтобы установка свойств каждый раз влияла только на текущий дисплей, необходимо добавить escape-последовательность, которая сбрасывает все свойства после отображаемого текста.\u001b[0m.

print("\u001b[34;1m hello world! \u001b[0m")

print("\u001b[41;37m hello \u001b[0m \u001b[32;4m world! \u001b[0m")

3.4 Расширенный цвет набор цвета 256 цветов

Будь то цвет переднего плана или цвет фона, представленный выше, цветов всего 8, включая черный и белый, и при высоких эстетических требованиях эти цвета совсем не элегантны. К счастью, у нас есть другие цвета на выбор, но поддерживаются только некоторые терминалы. Автор тестировал только MacOs, терминалы других платформ, читатели могут попробовать сами.

Формат escape-последовательности расширенного набора цветов:

"\u001b[38;5;${ID}m"

Пример:

for i in range(0, 16):
    line = ""
    for j in range(0, 16):
        code = str(i * 16 + j)
        line += "\u001b[38;5;" + code + "m " + code.ljust(4)
    print(line)
    print("\u001b[0m")

Разумеется, фоновый цвет тоже поддерживается, просто измените 38 на 48:

"\u001b[48;5;${ID}m"

Пример:

for i in range(0, 16):
    line = ""
    for j in range(0, 16):
        code = str(i * 16 + j)
        line += "\u001b[48;5;" + code + "m " + code.ljust(4)
    print(line)
    print("\u001b[0m")

4. Реализация Node.js

Ссылаться на"nodejs печатает цветной "черный"".

The End

Отображение цветного «черного» в командной строке — это так просто!

Thanks

Если эта статья была вам полезна, ставьте лайк 👍

【Читать исходный текст】


Отсканируйте QR-код в WeChat, чтобы получить оригиналы новейших технологий