Ответ 1
Будет ли Python termcolor module делать? Это будет грубым эквивалентом для некоторых видов использования.
from termcolor import colored
print colored('hello', 'red'), colored('world', 'green')
Пример находится прямо из этого сообщения, который имеет намного больше. Вот часть примера из docs
import sys
from termcolor import colored, cprint
text = colored('Hello, World!', 'red', attrs=['reverse', 'blink'])
print(text)
cprint('Hello, World!', 'green', 'on_red')
Особое требование заключалось в том, чтобы установить цвет и, предположительно, другие атрибуты терминала, чтобы все последующие отпечатки были такими. Хотя я заявил в оригинальной записи, что это возможно с этим модулем, я сейчас так не думаю. См. Последний раздел, чтобы сделать это.
Однако большую часть времени мы печатаем короткие сегменты текста в цвете, строку или две. Таким образом, интерфейс в этих примерах может быть лучше, чем "включить" цвет, печать и затем отключить его. (Как показано в примере с Perl.) Перхамы вы можете добавить необязательный аргумент к своей функции печати для окраски вывода, а также в функции использования функций модуля для окраски текста. Это также облегчает разрешение случайных конфликтов между форматированием и раскраской. Просто мысль.
Вот базовый подход для установки терминала, чтобы все последующие отпечатки отображались с заданным цветом, атрибутами или режимом.
Как только соответствующая последовательность ANSI отправляется на терминал, весь следующий текст отображается таким образом. Таким образом, если мы хотим, чтобы весь текст, напечатанный на этом терминале в будущем, был ярким/жирным красным, напечатайте ESC[
, а затем коды для "яркого" атрибута (1) и красного цвета (31), а затем m
# print "\033[1;31m" # this would emit a new line as well
import sys
sys.stdout.write("\033[1;31m")
print "All following prints will be red ..."
Чтобы отключить все ранее установленные атрибуты, используйте для атрибута 0, \033[0;35m
(пурпурный).
Чтобы подавить новую строку в python 3, используйте print('...', end="")
. Остальная часть работы заключается в упаковке для модульного использования (и для упрощения процесса пищеварения).
Файл colors.py
RED = "\033[1;31m"
BLUE = "\033[1;34m"
CYAN = "\033[1;36m"
GREEN = "\033[0;32m"
RESET = "\033[0;0m"
BOLD = "\033[;1m"
REVERSE = "\033[;7m"
Я рекомендую быстро прочитать некоторые ссылки на коды. Цвета и атрибуты можно комбинировать, и в этом пакете можно составить хороший список. A script
import sys
from colors import *
sys.stdout.write(RED)
print "All following prints rendered in red, until changed"
sys.stdout.write(REVERSE + CYAN)
print "From now on change to cyan, in reverse mode"
print "NOTE: 'CYAN + REVERSE' wouldn't work"
sys.stdout.write(RESET)
print "'REVERSE' and similar modes need be reset explicitly"
print "For color alone this is not needed; just change to new color"
print "All normal prints after 'RESET' above."
Если постоянное использование sys.stdout.write()
является проблемой, его можно обернуть в крошечную функцию или пакет превратился в класс с методами, которые устанавливают поведение терминала (печатать коды ANSI).
Некоторые из вышеперечисленных предложений - это скорее предложение поиска, например, комбинирование режима обратного хода и цвета. (Это доступно в модуле Perl, используемом в вопросе, а также чувствительно к порядку и тому подобному.)
Удобный список escape-кодов удивительно трудно найти, хотя есть много ссылок на поведение терминала и способы его управления. Страница Wiki на escape-кодах ANSI содержит всю информацию, но для ее объединения требуется небольшая работа. Страницы Bash prompt содержат много полезной информации. Здесь другая страница с прямыми таблицами кодов. Там гораздо больше.
Это можно использовать рядом с модулем типа termocolor
.