webdevqa.jp.net

Pythonのターミナルで色付きのテキストを印刷するにはどうすればいいですか?

Pythonで色付きのテキストを端末に出力するにはどうすればいいですか?しっかりしたブロックを表すのに最適なUnicode記号は何ですか?

1754
aboSamoor

これは、あなたがどのプラットフォームにいるかによって多少異なります。これを行う最も一般的な方法は、ANSIエスケープシーケンスを表示することです。簡単な例として、 blender build scripts からのPythonコードをいくつか示します。

class bcolors:
    HEADER = '\033[95m'
    OKBLUE = '\033[94m'
    OKGREEN = '\033[92m'
    WARNING = '\033[93m'
    FAIL = '\033[91m'
    ENDC = '\033[0m'
    BOLD = '\033[1m'
    UNDERLINE = '\033[4m'

このようなコードを使用するには、次のようにします。 

print bcolors.WARNING + "Warning: No active frommets remain. Continue?" 
      + bcolors.ENDC

これは、OS X、Linux、およびWindowsを含むUNIXで機能します( _ ansicon _ を使用する場合、またはWindows 10では VT100エミュレーション を有効にする場合)。色の設定、カーソルの移動などのためのANSIコードがあります。

もしこれを複雑にするつもりなら(そしてあなたがゲームを書いているのであればあなたのように聞こえます)、あなたはこれの多くの複雑な部分を扱う "curses"モジュールを調べるべきです。 Python Curses HowTO は良い入門書です。

拡張されたASCIIを使用していない(つまりPC上ではない)場合は、127以下のアスキー文字で動かなくなり、おそらく '#'または '@'がブロックに対する最善の策です。端末がIBM 拡張ASCII文字セット を使用していることを確認できる場合は、さらに多くのオプションがあります。文字176、177、178、および219は「ブロック文字」です。

"Dwarf Fortress"のような最新のテキストベースのプログラムは、テキストモードをグラフィカルモードでエミュレートし、古典的なPCフォントのイメージを使用します。 Dwarf Fortress Wiki で使用できるこれらのビットマップのいくつかを見つけることができます( ユーザー作成のタイルセット )。

テキストモードデモコンテスト には、テキストモードでグラフィックを作成するためのリソースがあります。

うーん..私はこの答えに少し夢中になったと思います。けれども私は壮大なテキストベースのアドベンチャーゲームを計画している最中です。あなたの色付きのテキストで頑張ってください!

1473
joeld

Python termcolorモジュール について言及していない人は誰もいないでしょう。使い方はとても簡単です。

from termcolor import colored

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

あるいはPython 3では:

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

しかし、それはゲームプログラミングとあなたがやりたい「色付きのブロック」のために十分洗練されていないかもしれません...

630
Samat Jain

答えは Colorama Pythonにおけるすべてのクロスプラットフォームカラーリングのための/です。

Python 3.6のサンプルスクリーンショット: example screenshot

545
priestc

色/スタイルを開始する文字列を印刷し、次に文字列を印刷し、色/スタイルの変更を'\x1b[0m'で終了します。

print('\x1b[6;30;42m' + 'Success!' + '\x1b[0m')

Success with green background example

次のコードを使用してシェルテキストのフォーマットオプションの表を取得します。

def print_format_table():
    """
    prints table of formatted text format options
    """
    for style in range(8):
        for fg in range(30,38):
            s1 = ''
            for bg in range(40,48):
                format = ';'.join([str(style), str(fg), str(bg)])
                s1 += '\x1b[%sm %s \x1b[0m' % (format, format)
            print(s1)
        print('\n')

print_format_table()

明暗の例(完全)

enter image description here

薄暗い例(部分)

top part of output

329
rabin utam

色を開始する文字列と色を終了する文字列を定義してから、先頭の開始文字列と最後の終了文字列を使用してテキストを印刷します。

CRED = '\033[91m'
CEND = '\033[0m'
print(CRED + "Error, does not compute!" + CEND)

これにより、Zenburnスタイルの配色でbash内、urxvt内に次の文字列が生成されます。

output colors

実験を通して、より多くの色を得ることができます。

color matrix

注:\33[5m\33[6mは点滅しています。

これにより、フルカラーコレクションを作成できます。

CEND      = '\33[0m'
CBOLD     = '\33[1m'
CITALIC   = '\33[3m'
CURL      = '\33[4m'
CBLINK    = '\33[5m'
CBLINK2   = '\33[6m'
CSELECTED = '\33[7m'

CBLACK  = '\33[30m'
CRED    = '\33[31m'
CGREEN  = '\33[32m'
CYELLOW = '\33[33m'
CBLUE   = '\33[34m'
CVIOLET = '\33[35m'
CBEIGE  = '\33[36m'
CWHITE  = '\33[37m'

CBLACKBG  = '\33[40m'
CREDBG    = '\33[41m'
CGREENBG  = '\33[42m'
CYELLOWBG = '\33[43m'
CBLUEBG   = '\33[44m'
CVIOLETBG = '\33[45m'
CBEIGEBG  = '\33[46m'
CWHITEBG  = '\33[47m'

CGREY    = '\33[90m'
CRED2    = '\33[91m'
CGREEN2  = '\33[92m'
CYELLOW2 = '\33[93m'
CBLUE2   = '\33[94m'
CVIOLET2 = '\33[95m'
CBEIGE2  = '\33[96m'
CWHITE2  = '\33[97m'

CGREYBG    = '\33[100m'
CREDBG2    = '\33[101m'
CGREENBG2  = '\33[102m'
CYELLOWBG2 = '\33[103m'
CBLUEBG2   = '\33[104m'
CVIOLETBG2 = '\33[105m'
CBEIGEBG2  = '\33[106m'
CWHITEBG2  = '\33[107m'

テストを生成するためのコードは次のとおりです。

x = 0
for i in range(24):
  colors = ""
  for j in range(5):
    code = str(x+j)
    colors = colors + "\33[" + code + "m\\33[" + code + "m\033[0m "
  print(colors)
  x=x+5
112
qubodup

あなたはANSIエスケープシーケンスについて知りたいのです。これは簡単な例です。

CSI="\x1B["
print CSI+"31;40m" + "Colored Text" + CSI + "0m"

詳細については http://en.wikipedia.org/wiki/ANSI_escape_code

ブロック文字の場合は、\ u2588のようなUnicode文字を試してください。

print u"\u2588"

すべてを一緒に入れて:

print CSI+"31;40m" + u"\u2588" + CSI + "0m"
76
Bryan Oakley

私のお気に入りの方法は Blessings ライブラリです(完全な開示:私が書いた)。例えば:

from blessings import Terminal

t = Terminal()
print t.red('This is red.')
print t.bold_bright_red_on_black('Bright red on black')

色付きのレンガを印刷するには、最も信頼できる方法は、スペースを背景色で印刷することです。私は nose-progressive にプログレスバーを描画するためにこのテクニックを使います:

print t.on_green(' ')

特定の場所にも印刷できます。

with t.location(0, 5):
    print t.on_yellow(' ')

あなたがあなたのゲームの過程で他の端末機能と混同しなければならないなら、あなたもそれをすることができます。読みやすくするためにPythonの標準文字列フォーマットを使うことができます。

print '{t.clear_eol}You just cleared a {t.bold}whole{t.normal} line!'.format(t=t)

Blessingsのいいところは、(圧倒的に一般的な)ANSIカラーの端末だけでなく、あらゆる種類の端末で動作するように最善を尽くすことです。また、使用する簡潔さを保ちながら、読めないエスケープシーケンスをコードから除外します。楽しむ!

58
Erik Rose

forループを使ってすべての色でクラスを生成し、100までの色の組み合わせをすべて繰り返してから、pythonカラーでクラスを作成しました。コピーして、あなたがそうするように、私によってGPLv2を貼り付けなさい:

class colors:
    '''Colors class:
    reset all colors with colors.reset
    two subclasses fg for foreground and bg for background.
    use as colors.subclass.colorname.
    i.e. colors.fg.red or colors.bg.green
    also, the generic bold, disable, underline, reverse, strikethrough,
    and invisible work with the main class
    i.e. colors.bold
    '''
    reset='\033[0m'
    bold='\033[01m'
    disable='\033[02m'
    underline='\033[04m'
    reverse='\033[07m'
    strikethrough='\033[09m'
    invisible='\033[08m'
    class fg:
        black='\033[30m'
        red='\033[31m'
        green='\033[32m'
        orange='\033[33m'
        blue='\033[34m'
        purple='\033[35m'
        cyan='\033[36m'
        lightgrey='\033[37m'
        darkgrey='\033[90m'
        lightred='\033[91m'
        lightgreen='\033[92m'
        yellow='\033[93m'
        lightblue='\033[94m'
        pink='\033[95m'
        lightcyan='\033[96m'
    class bg:
        black='\033[40m'
        red='\033[41m'
        green='\033[42m'
        orange='\033[43m'
        blue='\033[44m'
        purple='\033[45m'
        cyan='\033[46m'
        lightgrey='\033[47m'
46
GI Jack

この単純なコードを試してください 

def prRed(prt): print("\033[91m {}\033[00m" .format(prt))
def prGreen(prt): print("\033[92m {}\033[00m" .format(prt))
def prYellow(prt): print("\033[93m {}\033[00m" .format(prt))
def prLightPurple(prt): print("\033[94m {}\033[00m" .format(prt))
def prPurple(prt): print("\033[95m {}\033[00m" .format(prt))
def prCyan(prt): print("\033[96m {}\033[00m" .format(prt))
def prLightGray(prt): print("\033[97m {}\033[00m" .format(prt))
def prBlack(prt): print("\033[98m {}\033[00m" .format(prt))

prGreen("Hello world")
40
dayitv89

sty はcoloramaに似ていますが、あまり冗長ではなく、 8bit および 24bit (rgb)の色をサポートします。

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

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.set_style('orange', RgbFg(255, 150, 50))

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

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

プリント:

enter image description here

デモ: enter image description here

29
Rotareti

Windowsでは、Win32 APIにアクセスするために、モジュール 'win32console'(一部のPythonディストリビューションで利用可能)またはモジュール 'ctypes'(Python 2.5以上)を使用できます。

両方の方法をサポートする完全なコードを見るには、 カラーコンソールレポートコード from Testoob を参照してください。

ctypesの例:

import ctypes

# Constants from the Windows API
STD_OUTPUT_HANDLE = -11
FOREGROUND_RED    = 0x0004 # text color contains red.

def get_csbi_attributes(handle):
    # Based on IPython's winconsole.py, written by Alexander Belchenko
    import struct
    csbi = ctypes.create_string_buffer(22)
    res = ctypes.windll.kernel32.GetConsoleScreenBufferInfo(handle, csbi)
    assert res

    (bufx, bufy, curx, cury, wattr,
    left, top, right, bottom, maxx, maxy) = struct.unpack("hhhhHhhhhhh", csbi.raw)
    return wattr


handle = ctypes.windll.kernel32.GetStdHandle(STD_OUTPUT_HANDLE)
reset = get_csbi_attributes(handle)

ctypes.windll.kernel32.SetConsoleTextAttribute(handle, FOREGROUND_RED)
print "Cherry on top"
ctypes.windll.kernel32.SetConsoleTextAttribute(handle, reset)
26
orip

@ joeldの回答に基づいた単純な話

class PrintInColor:
    RED = '\033[91m'
    GREEN = '\033[92m'
    YELLOW = '\033[93m'
    LIGHT_PURPLE = '\033[94m'
    PURPLE = '\033[95m'
    END = '\033[0m'

    @classmethod
    def red(cls, s, **kwargs):
        print(cls.RED + s + cls.END, **kwargs)

    @classmethod
    def green(cls, s, **kwargs):
        print(cls.GREEN + s + cls.END, **kwargs)

    @classmethod
    def yellow(cls, s, **kwargs):
        print(cls.YELLOW + s + cls.END, **kwargs)

    @classmethod
    def lightPurple(cls, s, **kwargs):
        print(cls.LIGHT_PURPLE + s + cls.END, **kwargs)

    @classmethod
    def purple(cls, s, **kwargs):
        print(cls.PURPLE + s + cls.END, **kwargs)

それからちょうど

PrintInColor.red('hello', end=' ')
PrintInColor.green('world')
22
zahanm

私は自分のコードのどこでも使用できるグローバル関数を持つモジュールに@joeld回答をラップしました。

ファイル:log.py 

HEADER = '\033[95m'
OKBLUE = '\033[94m'
OKGREEN = '\033[92m'
WARNING = '\033[93m'
FAIL = '\033[91m'
ENDC = '\033[0m'
BOLD = "\033[1m"

def disable():
    HEADER = ''
    OKBLUE = ''
    OKGREEN = ''
    WARNING = ''
    FAIL = ''
    ENDC = ''

def infog( msg):
    print OKGREEN + msg + ENDC

def info( msg):
    print OKBLUE + msg + ENDC

def warn( msg):
    print WARNING + msg + ENDC

def err( msg):
    print FAIL + msg + ENDC

次のように使用してください。

 import log
    log.info("Hello World")
    log.err("System Error")
20
Mohamed Samy

https://pypi.python.org/pypi/lazymepip install -U lazymeを使用して、@ joeldの回答を基に作成します。

from lazyme.string import color_print
>>> color_print('abc')
abc
>>> color_print('abc', color='pink')
abc
>>> color_print('abc', color='red')
abc
>>> color_print('abc', color='yellow')
abc
>>> color_print('abc', color='green')
abc
>>> color_print('abc', color='blue', underline=True)
abc
>>> color_print('abc', color='blue', underline=True, bold=True)
abc
>>> color_print('abc', color='pink', underline=True, bold=True)
abc

スクリーンショット

enter image description here


color_printを新しいフォーマッタで更新したものがあります。例えば:

>>> from lazyme.string import palette, highlighter, formatter
>>> from lazyme.string import color_print
>>> palette.keys() # Available colors.
['pink', 'yellow', 'cyan', 'Magenta', 'blue', 'gray', 'default', 'black', 'green', 'white', 'red']
>>> highlighter.keys() # Available highlights.
['blue', 'pink', 'gray', 'black', 'yellow', 'cyan', 'green', 'Magenta', 'white', 'red']
>>> formatter.keys() # Available formatter, 
['hide', 'bold', 'italic', 'default', 'fast_blinking', 'faint', 'strikethrough', 'underline', 'blinking', 'reverse']

注:italicfast blinking、およびstrikethroughはすべての端末で機能するわけではなく、Mac/Ubuntuでは機能しません。 

例えば。 

>>> color_print('foo bar', color='pink', highlight='white')
foo bar
>>> color_print('foo bar', color='pink', highlight='white', reverse=True)
foo bar
>>> color_print('foo bar', color='pink', highlight='white', bold=True)
foo bar
>>> color_print('foo bar', color='pink', highlight='white', faint=True)
foo bar
>>> color_print('foo bar', color='pink', highlight='white', faint=True, reverse=True)
foo bar
>>> color_print('foo bar', color='pink', highlight='white', underline=True, reverse=True)
foo bar

スクリーンショット

enter image description here

18
alvas

Windowsの場合は、win32apiを使用していない限り、色付きでコンソールに印刷することはできません。

Linuxの場合は、printを使用するのと同じくらい簡単です。エスケープシーケンスは次のとおりです。

文字をボックスのように印刷するには、実際にはどのフォントをコンソールウィンドウに使用しているかによって異なります。ポンド記号はうまく機能しますが、フォントによって異なります。

#
18
UberJumper

私はこれをやってしまった、私はそれが最もきれいだと感じた: 

formatters = {             
    'RED': '\033[91m',     
    'GREEN': '\033[92m',   
    'END': '\033[0m',      
}

print 'Master is currently {RED}red{END}!'.format(**formatters)
print 'Help make master {GREEN}green{END} again!'.format(**formatters)
16
Ben174

あなたはcursesライブラリのPython実装を使うことができます: http://docs.python.org/library/curses.html

また、これを実行するとあなたの箱が見つかります。

for i in range(255):
    print i, chr(i)
16
daharon

あなたはCLINTを使うことができます:

from clint.textui import colored
print colored.red('some warning message')
print colored.green('nicely done!')

GitHubから入手してください

15
Giacomo Lacava

(Python 3とColoramaを使用して)withキーワードがこれらのようなリセットが必要な修飾子とどれほどうまく混ざっているかに注意してください。

from colorama import Fore, Style
import sys

class Highlight:
  def __init__(self, clazz, color):
    self.color = color
    self.clazz = clazz
  def __enter__(self):
    print(self.color, end="")
  def __exit__(self, type, value, traceback):
    if self.clazz == Fore:
      print(Fore.RESET, end="")
    else:
      assert self.clazz == Style
      print(Style.RESET_ALL, end="")
    sys.stdout.flush()

with Highlight(Fore, Fore.GREEN):
  print("this is highlighted")
print("this is not")
15
Janus Troelsen

あなたがゲームをプログラミングしているなら、おそらくあなたは背景色を変えてスペースだけを使いたいですか?例えば:

print " "+ "\033[01;41m" + " " +"\033[01;46m"  + "  " + "\033[01;42m"
11
suhib-alsisan

asciimatics はテキストUIとアニメーションを構築するための移植性のあるサポートを提供します。

#!/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

非同期:

Rainbow-colored text among ascii noise

10
jfs

これが呪いの例です。

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 __== '__main__':
    print "init..."
    curses.wrapper(main)
9
nosklo

https://raw.github.com/fabric/fabric/master/fabbric/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')
9
Vishal

Python 3のprint関数をラップするもう一つのpypiモジュール

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

Python 2.xでもfrom __future__ import printを使えば使える。これはモジュールpypiページからのpython 2の例です:

from __future__ import print_function
from colorprint import *

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

「こんにちは、世界!」と出力します。言葉は青で、感嘆符は赤く太く点滅しています。

9
drevicko

あなたが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
Navweb

わーい!他のバージョン

私は これ /が役に立つと思うが、私はそれを少し修正した。 this 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
Jossef Harush

Django を使用している場合 

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

スナップショット:

image

(私は一般的にrunserver端末でデバッグするために色付きの出力を使うのでそれを追加しました。)

あなたのマシンにそれがインストールされているかどうかをテストすることができます。
$ python -c "import Django; print Django.VERSION"
インストールするには: Djangoのインストール方法

試してみる!!

7
Grijesh Chauhan

より簡単な方法の1つは、cprintパッケージのtermcolor関数を使用することです。

color-print-python

印刷の%s, %dフォーマットもサポートします。

enter image description here

7
kmario23

私はあなたがどんなモジュールもなしであなたがテキストの色を変えることができるように窓の上で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ビット)

7
SimpleBinary
# 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

6
Andriy Makukha

私はLinux/OSX/Windowsで色を扱うモジュールを書きました。すべてのプラットフォームで16色すべてをサポートしています。前景色と背景色を異なる時間に設定できます。また、文字列オブジェクトを使用すると、len()や.capitalize()のような場合でも適切な結果が得られます。

https://github.com/Robpol86/colorclass

example on Windows cmd.exe

3
Robpol86

キャラクター用

あなたの端末はおそらくUnicode(通常はUTF-8でエンコードされた)文字を使っているので、あなたのお気に入りの文字を見るのは適切なフォント選択の問題だけです。 Unicode char U + 2588、 "Full block"はあなたが使うことを提案するものです。

以下を試してください。

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
tzot

pyfancy を使用すると、端末で色を付ける簡単な方法です。

例:

print(pyfancy.RED + "Hello Red" + pyfancy.END)
2
WebMaster

http://pypi.python.org/pypi/colorconsoleで入手可能な簡単なモジュールを書きました

Windows、Mac OS XおよびLinuxで動作します。 LinuxおよびMacにはANSIを使用しますが、Windows上のコンソール機能へのネイティブコールを使用します。これは呪いに代わるものではありませんが、単純なスクリプトやASCIIゲームで使用する必要がある場合に非常に便利です。

2
nmenezes

シェルのエスケープ文字を使用できます。これは、どの言語からでも使用できます。これらのエスケープ文字は、ESC文字で始まり、その後にいくつかの引数が続きます。

たとえば、あなたの端末に赤いHello world文字列を出力するには、

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

またはPythonスクリプトから:

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

また、私は エスケープシーケンスについての記事を書きました はおそらくあなたがこのメカニズムのより良い把握を得るのを助けることができます。お役に立てば幸いです。

1

この問題に取り組むために、 icolor と呼ばれる、内挿されたカラーコードで文字列を印刷するための、気が利くほど単純なパッケージを作成しました。

icolorは2つの関数を含みます:cformatcprint。それぞれは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;になります。

###をエスケープすることができます。

その単純さを考えると、最良のドキュメントはおそらく コード自体 です。

それは on PYPI なのでSudo easy_install icolorできます。

0
Brian M. Hunt

私はpythonに慣れていないので、このようなトピックを見つけるたびに興奮しています。しかし、今回は(突然)私は何を言うべきかがあるように感じます。特に数分前に私がPythonでWOWのことを発見したので(少なくとも今のところは):

コンテキストマネージャ

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

_ example _

またはちょうどこのように:

#   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
qpaycm

私の2セント( 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!')

「うまくいきました」緑色で表示されます。

0
Diego Navarro