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



Существует ли какой-либо эквивалент python для perl



print color 'red';
print <something>;
print color 'reset';


Доступно в python?



Я знал решение;



"x1b[1;%dm" % (<color code>) + "ERROR: log file does not exist" + "x1b[0m"


То, что я хочу, это я должен быть в состоянии установить цвет для всех печатных сообщений, таких как,



print color 'red'
function_print_something(<some message>)
print color 'reset'


Здесь 'function_print_something' - это моя функция python, которая будет печатать некоторые отформатированные сообщения журнала на экране.

1829   4  

4 ответов:

Подойдет ли модульPython termcolor ? Это было бы грубым эквивалентом для некоторых применений.

from termcolor import colored

print colored('hello', 'red'), colored('world', 'green')

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

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[ с последующими кодами для атрибута" bright " (1) и красного цвета (31), а затем by 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 (magenta).

Для подавления новой строки в 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"

Я рекомендую быстро прочитать некоторые ссылки на коды. Цвета и атрибуты можно комбинировать, и в этом пакете можно составить хороший список. Один сценарий

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, используемом в вопросе, а также чувствительно к порядку и тому подобному.)


Удобный список кодов эвакуации удивительно трудно найти. найти, хотя есть много ссылок на поведение терминала и как его контролировать. СтраницаWiki на ANSI escape codes содержит всю информацию, но требует небольшой работы, чтобы свести ее воедино. Страницы наbash prompt содержат много конкретной полезной информации. Вот еще одна страницас прямыми таблицами кодов. Там есть гораздо больше.

Это может быть использовано вместе с модулем типа termocolor.

Я предлагаю стай. Он похож на colorama, но менее многословен и поддерживает цвета 8bit и 24bit. Вы также можете расширить регистр цветов своими собственными цветами.

from sty import fg, bg, ef, rs, Rule

foo = fg.red + 'This is red text!' + fg.rs
bar = bg.blue + 'This has a blue background!' + bg.rs
baz = ef.italic + 'This is italic text' + rs.italic
qux = fg(201) + 'This is pink text using 8bit colors' + fg.rs
qui = fg(255, 10, 10) + 'This is red text using 24bit colors.' + fg.rs

# Add new colors:

fg.orange = Rule('rgb_fg', 255, 150, 50)

buf = fg.orange + 'Yay, Im orange.' + fg.rs


print(foo, bar, baz, qux, qui, buf, sep='\n')

Введите описание изображения здесь

Демо:

Введите описание изображения здесь

Есть несколько библиотек, которые помогают здесь. Для инструментов cmdline я иногда используюcolorama .

Например

from colorama import init, Fore, Back, Style
init()

def cprint(msg, foreground = "black", background = "white"):
    fground = foreground.upper()
    bground = background.upper()
    style = getattr(Fore, fground) + getattr(Back, bground)
    print(style + msg + Style.RESET_ALL)

cprint("colorful output, wohoo", "red", "black")
Но вместо того, чтобы использовать строки, вы можете использовать перечисление и/или добавить несколько проверок. Не самое красивое решение, но работает на osx/linux и windows и прост в использовании.

Другие темы по этой теме и кросс-платформенной поддержке: например, здесь .

Вы можете попробовать это с python 3:

from termcolor import colored
print(colored('Hello, World!', 'green', 'on_red'))

Если вы используете операционную систему windows, приведенный выше код может не работать для вас. Затем вы можете попробовать этот код:

from colorama import init
from termcolor import colored

# use Colorama to make Termcolor work on Windows too
init()

# then use Termcolor for all colored text output
print(colored('Hello, World!', 'green', 'on_red'))

Надеюсь, что помогает.

Comments

    Ничего не найдено.