Как напечатать цветной текст в терминале в Python? - PullRequest
1768 голосов
/ 13 ноября 2008

Как вывести цветной текст на терминал в Python? Какой символ Unicode лучше всего представляет сплошной блок?

Ответы [ 38 ]

3 голосов
/ 13 ноября 2008

Для персонажей

Ваш терминал, скорее всего, использует символы Unicode (обычно в кодировке UTF-8), поэтому выбор подходящего шрифта для просмотра вашего любимого символа - это только вопрос Unicode char U + 2588, «Полный блок» - это тот, который я бы посоветовал вам использовать.

Попробуйте следующее:

import unicodedata
fp= open("character_list", "w")
for index in xrange(65536):
    char= unichr(index)
    try: its_name= unicodedata.name(char)
    except ValueError: its_name= "N/A"
    fp.write("%05d %04x %s %s\n" % (index, index, char.encode("UTF-8"), its_name)
fp.close()

Проверьте файл позже с вашим любимым средством просмотра.

Для цветов

curses - это модуль, который вы хотите использовать. Проверьте этот учебник .

3 голосов
/ 02 ноября 2014

Я написал модуль, который обрабатывает цвета в Linux / OSX / Windows. Он поддерживает все 16 цветов на всех платформах, вы можете устанавливать цвета переднего плана и фона в разное время, а строковые объекты дают нормальные результаты для таких вещей, как len () и .capitalize ().

https://github.com/Robpol86/colorclass

example on Windows cmd.exe

2 голосов
/ 27 января 2015

Используйте pyfancy Это простой способ сделать цвет в терминале!

Пример:

print(pyfancy.RED + "Hello Red" + pyfancy.END)
2 голосов
/ 20 октября 2011

Я написал простой модуль, доступный по адресу: http://pypi.python.org/pypi/colorconsole

Работает с Windows, Mac OS X и Linux. Он использует ANSI для Linux и Mac, но имеет собственные вызовы консольных функций в Windows. У вас есть цвета, позиционирование курсора и ввод с клавиатуры. Он не заменяет проклятия, но может быть очень полезен, если вам нужно использовать его в простых скриптах или играх ASCII.

1 голос
/ 01 декабря 2014

Вы можете использовать экранирующие символы оболочки, доступные на любом языке. Эти escape-символы начинаются с символа ESC, за которым следует ряд аргументов.

Например, для вывода красной строки Hello world в ваш терминал:

echo "\e[31m Hello world \e[0m"

Или из скрипта Python:

print("\e[31m Hello world \e[0m")

Кроме того, я написал статью о Escape-последовательностях , которая может помочь вам лучше понять этот механизм. Я надеюсь, что это поможет вам.

0 голосов
/ 27 августа 2018

Я noob в Python, и я взволнован каждый раз, когда я открываю темы, как эта. Но на этот раз (внезапно) я чувствую, что мне есть, что сказать. Тем более, что несколько минут назад я обнаружил WOW в Python (по крайней мере, для меня сейчас):

Контекстные менеджеры

from contextlib import contextmanager
#   FORECOLOR
BLACKFC,REDFC,GREENFC,YELLOWFC,BLUEFC = '38;30m','38;31m','38;32m','38;33m','38;34m'
#   BACKGOUND
BLACKBG,REDBG,GREENBG,YELLOWBG,BLUEBG = '48;40m','48;41m','48;42m','48;43m','48;44m'

@contextmanager
def printESC(prefix, color, text):
  print("{prefix}{color}{text}".format(prefix=prefix, color=color, text=text), end='')
  yield
  print("{prefix}0m".format(prefix=prefix))

with printESC('\x1B[', REDFC, 'Colored Text'):
  pass

Пример

или просто так:

#   FORECOLOR
BLACKFC,REDFC,GREENFC,YELLOWFC,BLUEFC = '38;30m','38;31m','38;32m','38;33m','38;34m'
#   BACKGOUND
BLACKBG,REDBG,GREENBG,YELLOWBG,BLUEBG = '48;40m','48;41m','48;42m','48;43m','48;44m'

def printESC(prefix, color, text):
  print("{prefix}{color}{text}".format(prefix=prefix, color=color, text=text), end='')
  print("{prefix}0m".format(prefix=prefix))

printESC('\x1B[', REDFC, 'Colored Text')
0 голосов
/ 24 июня 2012

Для решения этой проблемы я создал невероятно простой пакет для печати строк с интерполированными цветовыми кодами, который называется icolor .

icolor включает две функции: cformat и cprint, каждая из которых принимает строку с подстроками, которые интерполируются для сопоставления с escape-последовательностями ANSI, например

from icolor import cformat # there is also cprint

cformat("This is #RED;a red string, partially with a #xBLUE;blue background")
'This is \x1b[31ma red string, partially with a \x1b[44mblue background\x1b[0m'

Включены все цвета ANSI (например, #RED;, #BLUE; и т. Д.), А также #RESET;, #BOLD; и другие.

Цвет фона имеет префикс x, поэтому зеленый фон будет #xGREEN;.

Можно сбежать # с ##.

Учитывая его простоту, лучшая документация, вероятно, сам код .

Это на PYPI , так что можно sudo easy_install icolor.

0 голосов
/ 20 сентября 2013

Мои два цента ( PyColorTerm ):

Установка:

sudo apt-get install python-pip
pip install pycolorterm

Python-скрипт:

from pycolorterm import pycolorterm

with pycolorterm.pretty_output(pycolorterm.FG_GREEN) as out:
    out.write('Works OK!')

"работает хорошо!" показывает зеленым цветом.

...