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

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

Ответы [ 38 ]

10 голосов
/ 05 мая 2016

asciimatics обеспечивает портативную поддержку для создания текстового интерфейса и анимации:

#!/usr/bin/env python
from asciimatics.effects import RandomNoise  # $ pip install asciimatics
from asciimatics.renderers import SpeechBubble, Rainbow
from asciimatics.scene import Scene
from asciimatics.screen import Screen
from asciimatics.exceptions import ResizeScreenError


def demo(screen):
    render = Rainbow(screen, SpeechBubble('Rainbow'))
    effects = [RandomNoise(screen, signal=render)]
    screen.play([Scene(effects, -1)], stop_on_resize=True)

while True:
    try:
        Screen.wrapper(demo)
        break
    except ResizeScreenError:
        pass

Asciicast:

rainbow-colored text among ascii noise

10 голосов
/ 25 июня 2012

Если вы используете Windows, то вот, пожалуйста!

# display text on a Windows console
# Windows XP with Python27 or Python32
from ctypes import windll
# needed for Python2/Python3 diff
try:
    input = raw_input
except:
    pass
STD_OUTPUT_HANDLE = -11
stdout_handle = windll.kernel32.GetStdHandle(STD_OUTPUT_HANDLE)
# look at the output and select the color you want
# for instance hex E is yellow on black
# hex 1E is yellow on blue
# hex 2E is yellow on green and so on
for color in range(0, 75):
     windll.kernel32.SetConsoleTextAttribute(stdout_handle, color)
     print("%X --> %s" % (color, "Have a fine day!"))
     input("Press Enter to go on ... ")
9 голосов
/ 09 июля 2015

Еще один модуль pypi, который включает в себя функцию печати python 3:

https://pypi.python.org/pypi/colorprint

Используется в python 2.x, если вы также from __future__ import print. Вот пример Python 2 со страницы модулей Pypi:

from __future__ import print_function
from colorprint import *

print('Hello', 'world', color='blue', end='', sep=', ')
print('!', color='red', format=['bold', 'blink'])

Выводы "Привет, мир!" со словами в синем и восклицательным знаком, выделенным красным и мигающим.

9 голосов
/ 08 февраля 2015

YAY! другая версия

пока я нахожу этот ответ полезным, я немного его изменил. это Github Gist является результатом

использование

print colors.draw("i'm yellow", bold=True, fg_yellow=True)

enter image description here

Кроме того, вы можете обернуть обычные использования:

print colors.error('sorry, ')

asd

https://gist.github.com/Jossef/0ee20314577925b4027f

9 голосов
/ 02 июля 2009

Вот пример проклятий:

import curses

def main(stdscr):
    stdscr.clear()
    if curses.has_colors():
        for i in xrange(1, curses.COLORS):
            curses.init_pair(i, i, curses.COLOR_BLACK)
            stdscr.addstr("COLOR %d! " % i, curses.color_pair(i))
            stdscr.addstr("BOLD! ", curses.color_pair(i) | curses.A_BOLD)
            stdscr.addstr("STANDOUT! ", curses.color_pair(i) | curses.A_STANDOUT)
            stdscr.addstr("UNDERLINE! ", curses.color_pair(i) | curses.A_UNDERLINE)
            stdscr.addstr("BLINK! ", curses.color_pair(i) | curses.A_BLINK)
            stdscr.addstr("DIM! ", curses.color_pair(i) | curses.A_DIM)
            stdscr.addstr("REVERSE! ", curses.color_pair(i) | curses.A_REVERSE)
    stdscr.refresh()
    stdscr.getch()

if __name__ == '__main__':
    print "init..."
    curses.wrapper(main)
9 голосов
/ 27 марта 2013

https://raw.github.com/fabric/fabric/master/fabric/colors.py

"""
.. versionadded:: 0.9.2

Functions for wrapping strings in ANSI color codes.

Each function within this module returns the input string ``text``, wrapped
with ANSI color codes for the appropriate color.

For example, to print some text as green on supporting terminals::

    from fabric.colors import green

    print(green("This text is green!"))

Because these functions simply return modified strings, you can nest them::

    from fabric.colors import red, green

    print(red("This sentence is red, except for " + \
          green("these words, which are green") + "."))

If ``bold`` is set to ``True``, the ANSI flag for bolding will be flipped on
for that particular invocation, which usually shows up as a bold or brighter
version of the original color on most terminals.
"""


def _wrap_with(code):

    def inner(text, bold=False):
        c = code
        if bold:
            c = "1;%s" % c
        return "\033[%sm%s\033[0m" % (c, text)
    return inner

red = _wrap_with('31')
green = _wrap_with('32')
yellow = _wrap_with('33')
blue = _wrap_with('34')
magenta = _wrap_with('35')
cyan = _wrap_with('36')
white = _wrap_with('37')
8 голосов
/ 02 марта 2019

Я отвечаю, потому что я нашел способ использовать коды ANSI на окнах, чтобы вы могли изменить цвет текста без каких-либо модулей:

Строка, которая делает эту работу, - os.system('color'), но чтобы убедиться, что вы не вызываете ошибок, если человек не работает в Windows, вы можете использовать этот скрипт:

import os, sys

if sys.platform.lower() == "win32":
    os.system('color')

# Group of Different functions for different styles
class style():
    BLACK = lambda x: '\033[30m' + str(x)
    RED = lambda x: '\033[31m' + str(x)
    GREEN = lambda x: '\033[32m' + str(x)
    YELLOW = lambda x: '\033[33m' + str(x)
    BLUE = lambda x: '\033[34m' + str(x)
    MAGENTA = lambda x: '\033[35m' + str(x)
    CYAN = lambda x: '\033[36m' + str(x)
    WHITE = lambda x: '\033[37m' + str(x)
    UNDERLINE = lambda x: '\033[4m' + str(x)
    RESET = lambda x: '\033[0m' + str(x)

print(style.YELLOW("Hello, ") + style.RESET("World!"))

Версия Python: 3.6.7 (32 бита)

8 голосов
/ 21 мая 2018

Еще более простой вариант - использовать функцию cprint из пакета termcolor.

color-print-python

Он также поддерживает %s, %d формат печати

enter image description here

8 голосов
/ 22 апреля 2015

Если вы используете Джанго

>>> from django.utils.termcolors import colorize
>>> print colorize("Hello World!", fg="blue", bg='red',
...                 opts=('bold', 'blink', 'underscore',))
Hello World!
>>> help(colorize)

снимок:

image

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

Вы можете проверить, установлен ли он на вашем компьютере:
<sub> $ python -c "import django; print django.VERSION"</sub>
Чтобы установить его, проверьте: Как установить Django

Попробуй !!

6 голосов
/ 25 апреля 2018
# Pure Python 3.x demo, 256 colors
# Works with bash under Linux

fg = lambda text, color: "\33[38;5;" + str(color) + "m" + text + "\33[0m"
bg = lambda text, color: "\33[48;5;" + str(color) + "m" + text + "\33[0m"

def print_six(row, format):
    for col in range(6):
        color = row*6 + col + 4
        if color>=0:
            text = "{:3d}".format(color)
            print (format(text,color), end=" ")
        else:
            print("   ", end=" ")

for row in range(-1,42):
    print_six(row, fg)
    print("",end=" ")
    print_six(row, bg)
    print()

Text with altering foreground and background, colors 0..141 Text with altering foreground and background, colors 142..255

...