Pythonのターミナルで色付きのテキストを印刷する方法は?


2130

Pythonで色付きのテキストをターミナルに出力するにはどうすればよいですか?固体ブロックを表すのに最適なUnicodeシンボルは何ですか?


6
より良い応答を得るために、いくつかの追加情報を指定する必要があります:マルチプラットフォーム?外部モジュールは受け入れられますか?
ソリン

2
IPythonは、クロスプラットフォームでそれを行います。彼らが使用するものを参照してください?
エンドリス

このシンボルは素晴らしい色のブロックになります: 問題は、拡張ASCIIであるということだけです。おそらく、それを使用して動作させることができますhttp://stackoverflow.com/questions/8465226/using-extended-ascii-codes-with-python
Samy Bencherif

一部の端末では、Unicode文字も表示できます。それがあなたの端末に当てはまる場合、可能な文字はほとんど無制限です。
ayke

4
この回答はかなり遅れましたが、私にとっては最高のようです...上記で投票したものはWindowsに特別なハックが必要ですが、これは機能します:stackoverflow.com/a/3332860/901641
ArtOfWarfare

回答:


1835

これは、使用しているプラ​​ットフォームによって多少異なります。これを行う最も一般的な方法は、ANSIエスケープシーケンスを出力することです。簡単な例として、blenderビルドスクリプトからの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)

または、Python3.6以降:

print(f"{bcolors.WARNING}Warning: No active frommets remain. Continue?{bcolors.ENDC}")

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

これで複雑になる場合(そして、ゲームを書いている場合のように聞こえる場合)、「curses」モジュールを調べる必要があります。これは、この複雑な部分の多くを処理します。Pythonの呪いHOWTO良い紹介です。

拡張ASCIIを使用していない場合(つまり、PCにない場合)、127未満のASCII文字が表示されたままになり、 '#'または '@'がおそらくブロックに最適です。端末がIBM 拡張ASCII文字セットを使用していることを確認できる場合場合は、さらに多くのオプションがあります。文字176、177、178、219は「ブロック文字」です。

「ドワーフフォートレス」などの一部の最新のテキストベースのプログラムは、グラフィカルモードでテキストモードをエミュレートし、クラシックPCフォントのイメージを使用します。Dwarf Fortress Wikiで使用できるこれらのビットマップの一部を見つけることができます(ユーザー作成のタイルセット)。

テキストモードのデモコンテストは、テキストモードでのグラフィックスを行うためのより多くのリソースを持っています。

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


しかし、私のデフォルトのプロンプトが黒ではないと仮定します-これらのトリックの後でpythonをリセットすることは可能だと思いますか?
Adobe

4
Linuxでは、あなたが使用する場合がありますtputそのように、それはよりポータブルなコードになり以来。
Martin Ueding

3
@Cawas:実際の使用例disableは、出力をファイルにパイプする場合です。のようなツールcatは色をサポートしているかもしれませんが、一般的にファイルに色情報を印刷しない方が良いです。
セバスチャンマッハ

1
@ AlexanderSimko、Windows 10でVT100サポートを有効にするctypesコードスニペットを次に示しますimport ctypes; kernel32 = ctypes.WinDLL('kernel32'); hStdOut = kernel32.GetStdHandle(-11); mode = ctypes.c_ulong(); kernel32.GetConsoleMode(hStdOut, ctypes.byref(mode)); mode.value |= 4; kernel32.SetConsoleMode(hStdOut, mode)
Eryk Sun 2016

1
回答のPythonサンプルコードを使用している人には、90〜97と100〜107の範囲の色は非標準であり、実際、私の端末ではすべての色が変数名。標準範囲30〜37および40〜47を使用することをお勧めします。出典:en.wikipedia.org/wiki/...
balu

807

Pythonのtermcolorモジュールについて誰も触れていないことに驚いています。使い方はかなり簡単です:

from termcolor import colored

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

またはPython 3の場合:

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

ただし、ゲームプログラミングや、実行したい「色付きブロック」については、十分に洗練されていない可能性があります...


2
ANSIコードを出力しているので、ansi.sysがロードされていれば、Windows(DOSコンソール)で動作しますか? support.microsoft.com/kb/101875
Phil P

37
2011年

12
(コロラマとは異なり)ユニットテストがなく、2011年以降更新されていない
Janus Troelsen

5
termcolor.COLORS色のリストが表示されます
akxlr 2015年

23
Windowsでos.system('color')最初に実行すると、ANSIエスケープシーケンスが機能し始めます。
Szabolcs

717

答えはコロラマです、Pythonのすべてのクロスプラットフォームカラーリングのです。

Python 3.6の例のスクリーンショット: スクリーンショットの例


317
コロラマの作者として、@ nbv4の言及に感謝します。少し明確にしていきます。コロラマは、Pythonプログラムがこのページの他の多くの回答で説明されているのと同じANSIコードを使用して、すべてのプラットフォームでカラーのターミナルテキストを印刷できるようにすることを目的としています。Windowsでは、コロラマはこれらのANSI文字をstdoutから取り除き、カラーテキストの同等のwin32呼び出しに変換します。他のプラットフォームでは、コロラマは何もしません。したがって、ANSIコード、またはTermcolorなどのモジュールを使用できます。コロラマを使用すると、すべてのプラットフォームで「そのまま動作」します。とにかくその考えです。
ジョナサンハートレー

2
@ジョナサン、これは本当に素晴らしいライブラリです!プラットフォームカラーのPython出力をクロスする機能は本当に素晴らしく、便利です。自分のコンソールを彩るライブラリ用のツールを提供しています。そのコンソールの出力をターミナルにリダイレクトして、出力を色分けできます。これで、ライブラリを1つ増やして、ユーザーに色を選択させることができます。これにより、色覚異常の人々が実際に出力を正しく表示できるように設定することができます。ありがとう
Demolishun

50
これは標準ライブラリにあるはずです...クロスプラットフォームのカラーサポートは重要だと思います。
daviewales 2013年

5
コロラマは素晴らしいです!また、コロラマに基づいて構築され、シンプルなタグベースのマークアップ(例:)を使用し<b>bold</b>て端末テキストにスタイルを追加できる
ansimarkupもご覧ください

30
これは、colorama.init()を呼び出さないと機能しません。投票してください!
スミットジョンス2018

428

色/スタイルで始まり、次に文字列で始まり、色/スタイルの変更を終了する文字列を次のように出力し'\x1b[0m'ます。

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

緑の背景の例で成功

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

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()

ライトオンダークの例(完全)

ここに画像の説明を入力してください

ダークオンライトの例(部分)

出力の上部


8
ほとんどのアプリケーションのためのほとんどのシェルだけでなく、ipython、良い十分で、この作品
dashesy

4
これはどの端末ですか?
FlipTack

4
それはどれくらいポータブルですか?
Ruggero Turra 2017年


203

色を開始する文字列と色を終了する文字列を定義し、開始文字列を先頭に、終了文字列を末尾にしてテキストを印刷します。

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

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

出力色

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

カラーマトリックス

注:\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

2
どのようにtxtを点滅させましたか
WiLL_K 2017年

2
点滅させるシェルまたはターミナルは何ですか?
Zypps987 2017年

1
(u)rxvtの例
qubodup 2017年

6
点滅するテキストは非常によく機能します。どうすれば停止できますか?何らかの理由ですべての連続したプリントが点滅しています。私の端末はパーティータイムだと思っています!
キャプテン

3
点滅する文字列の最後に\33[0m、以上を入れCENDます。
Stiffy2000、2018

94

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")

3
試してみてくださいdef d(*v): return '\x1B['+';'.join(map(str, v))+'m'そしてprint ' '.join([d(k,i)+str(i%10)+d(0) for i in range(30,38)+range(40,48) for k in range(2)])
エフゲニーSergeev

ここでリセットの意味は何ですか?
MohitC 2017

72

私はWindows 10でANSIコードを使用する方法を見つけたので応答しています。組み込みではないモジュールなしでテキストの色を変更できます。

この作業を行う行はos.system("")、またはその他のシステムコールです。これにより、ターミナルでANSIコードを印刷できます。

import os

os.system("")

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

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

注:これは他のWindowsオプションと同じオプションを提供しますが、このトリックを使用しても、WindowsはANSIコードを完全にはサポートしていません。すべてのテキスト装飾色が機能するわけではなく、すべての「明るい」色(コード90-97および100-107)は通常の色(コード30-37および40-47)と同じように表示されます。

編集:さらに短い方法を見つけてくれた@jlに感謝します。

tl; dros.system("")ファイルの上部近くに追加します。

Pythonバージョン: 3.6.7


2
これは機能します-colorコマンドがWindowsターミナルでANSIコードを有効にすることに本当に驚いています。これが可能であることを知らずに何年も行ってきました-コマンド自体はこれを行う手がかりを与えません。
Stuart Axon

1
最も単純で、完全に機能します。ありがとう。
アリ

3
明確にするために、これはWindows 10上で動作します
Anaksunaman

2
Windows 7 / 8.1では機能しません。
ニコス

2
@SimpleBinary、あなたの答えを本当にありがとう!答えをいじってみるとif sys.platform.lower() == "win32": os.system('color')、単にに置き換えるだけで、さらに単純化できることがわかりましたos.system('')。条件は必要ありません。コードはWindows 10とLinuxの両方で実行しました(テストしたとき)。ご覧のとおり、へのシステムコールを行う必要はありませんcolor。通話dircdabcdef、、ちょうど空の文字列は正常に動作(非空の文字列は、おそらくあなたが見たいと思っていない出力が印刷されますが)。
JL

60

私のお気に入りの方法は、Blessingsライブラリを使用することです(完全な開示:私が作成しました)。例えば:

from blessings import Terminal

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

色付きのレンガを印刷するには、最も信頼できる方法は、背景色でスペースを印刷することです。私はこの手法を使用して、プログレスバーを鼻からプログレッシブに描画します。

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色の端末だけでなく、あらゆる種類の端末で作業できるように最善を尽くしていることです。また、使用するのに簡潔なまま、コードから読み取り不能なエスケープシーケンスを除外します。楽しんで!


65
色をパラメータとしてではなく関数名として指定することは、疑わしい習慣です。
LtWorf

1
@LtWorf:getattr必要に応じて、簡単にパラメーターにすることができます。あるいは、フォーマット文字列を動的に作成することもできます。
jfs 2014

8
@progoあなたがそれを行うことができるという事実は、あなたがそれを行うべきであるという意味ではありません。色が単に渡すことができるパラメーターである場合、より一般的です。
LtWorf 2015

2
あなたcan just passはPythonの関数です。
MaxNoe 2015年

2
祝福のインポートはWindowsでは機能しないため、スクリプトをクロスプラットフォームにする必要がある場合は使用しないでください。
Adversus

58

STYがコロラマに似ていますが、それはあまり冗長だ、サポート8ビットおよび24ビット(RGB)の色、あなたはサポートがミュート、独自のスタイルを登録することができ、十分に文書化とより多くの、本当に柔軟です。

例:

from sty import fg, bg, ef, rs

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 custom colors:

from sty import Style, RgbFg

fg.orange = Style(RgbFg(255, 150, 50))

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

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

プリント:

ここに画像の説明を入力してください

デモ: ここに画像の説明を入力してください


7
コロラマと比較することを検討する場合は非常に便利ですが、ライブラリの方が好きですが、ボックスからのAPIが短いため、人気が高まるとすばらしいでしょう。ありがとう!
Victor Gavro、

私はスタイが好きで、スタイで文字列をフォーマットしようとしていますが、1つの問題は、複数の色を印刷するときに、デフォルトの色ではなく前の色にリセットできることですか?
intijk

@VictorGavroそれはいい考えです!ドキュメントに比較を追加できます。
Rotareti

@intijkあなたの質問は本当にコメントセクションに適合しません。この種の質問については、新しいSO質問を作成するか、GitHub Issue Trackerを使用してください。
Rotareti

53

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'

44

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

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")

19
提案:他の文字列と組み合わせて使用​​できるように、それらを直接印刷するのではなく、その色付きの文字列を返すラムダを定義します。
gustafbstrom

34

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

参照、両方の方法をサポートしている完全なコードを参照するには、コードの報告カラーコンソールをから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)

2
正直なところ、これはWindowsで機能する唯一のソリューションです。他のすべての答えは、お互いの単なるコピーです。
Danilo、

FWIW、Windowsでは、ANSIシーケンスをサポートするConEmuを使用するほうが簡単です(ネイティブターミナルに対する他の多くの利点は別として)。ただし、ネイティブソリューションがあることは素晴らしいことです。
Endre Both

私はダニロと一緒です。
ムハンマドアリ

24

@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')

2
これは、複数の位置引数または文字列型以外のものを渡すとクラッシュします
Romain Vincent

@RomainVincent次に、1つ以上の位置引数または文字列ty以外のものを渡さないでください。これらはprint-replacementsですか?異議は取り消されました。
wizzwizz4

1
@ wizzwizz4あなたがこのコメントで何を意味していたのか分かりません。とにかく要点はわかりません。クラスを提案するつもりなら...、printのように単純なメソッドを置き換えるために、そのように簡単に壊れやすいようにすることを避けることもできます。ただ私の意見です。
Romain Vincent

1
@RomainVincent私はあなたの反対が間違っていると言っていましたが、機能printを適切に複製するために、多目的に機能を置き換えるために。
wizzwizz4

1
@RomainVincent実装は無限引数を使用します:<code> def purple(cls, *args, **kwargs): print(cls.PURPLE, *args, cls.END, **kwargs)</ code>
Emilien Baudet

23

@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")

22

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

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

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

#

21
# Pure Python 3.x demo, 256 colors
# Works with bash under Linux and MacOS

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, end="\n"):
    for col in range(6):
        color = row*6 + col - 2
        if color>=0:
            text = "{:3d}".format(color)
            print (format(text,color), end=" ")
        else:
            print(end="    ")   # four spaces
    print(end=end)

for row in range(0, 43):
    print_six(row, fg, " ")
    print_six(row, bg)

# Simple usage: print(fg("text", 160))

前景と背景を変更したテキスト、色0..141 前景と背景を変更したテキスト、色142..255


20

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

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)

これは、サードパーティのパッケージなしで実行するのに本当に便利です。
Jamie Counsell 2017年

20

https://pypi.python.org/pypi/lazyme を使用して、@ joeld回答に基づいて構築しますpip install -U lazyme

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

スクリーンショット:

ここに画像の説明を入力してください


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

スクリーンショット:

ここに画像の説明を入力してください


20
def black(text):
    print('\033[30m', text, '\033[0m', sep='')

def red(text):
    print('\033[31m', text, '\033[0m', sep='')

def green(text):
    print('\033[32m', text, '\033[0m', sep='')

def yellow(text):
    print('\033[33m', text, '\033[0m', sep='')

def blue(text):
    print('\033[34m', text, '\033[0m', sep='')

def magenta(text):
    print('\033[35m', text, '\033[0m', sep='')

def cyan(text):
    print('\033[36m', text, '\033[0m', sep='')

def gray(text):
    print('\033[90m', text, '\033[0m', sep='')


black("BLACK")
red("RED")
green("GREEN")
yellow("YELLOW")
blue("BLACK")
magenta("MAGENTA")
cyan("CYAN")
gray("GRAY")

オンラインで試す


これはpython3専用ですか?python2でsep = ''でエラーが発生しました
ScipioAfricanus

python3 ubuntu 18.04
Julius Prayogoで

18

withキーワードがこれらのようなモディファイアとどの程度うまく組み合わされるかに注意してください(Python 3とColoramaを使用して)。

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")

コロラマを試して、使用print(Style.BRIGHT + "Header Test")print (Style.DIM + word)て本当に素晴らしいプロンプトを作成しました。
トム

これはcontextlib、Py3で使用するように変更する必要があります。

@cat:Pythonのどのバージョンからそれが必要になりますか?
Janus Troelsen

私は3以上だと思います- @contextlib.contextmanagerデコレータが付いているはずですよね?

1
@猫:なぜ?なしで素晴らしい作品。
Janus Troelsen 2016年


17

CLINTを使用できます。

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

GitHubから入手してください


1
最初のリンクがなくなったので削除しました。GHリンクはまだ良好です(ただし、プロジェクトは「アーカイブ」され、基本的に私が収集できるものから放棄されています)。
ジャコモラカバ2018

15

私は遅れていることを知っています。しかし、私はColorItというライブラリーを持っています。とてもシンプルです。

ここではいくつかの例を示します。

from ColorIt import *

# Use this to ensure that ColorIt will be usable by certain command line interfaces
initColorIt()

# Foreground
print (color ('This text is red', colors.RED))
print (color ('This text is orange', colors.ORANGE))
print (color ('This text is yellow', colors.YELLOW))
print (color ('This text is green', colors.GREEN))
print (color ('This text is blue', colors.BLUE))
print (color ('This text is purple', colors.PURPLE))
print (color ('This text is white', colors.WHITE))

# Background
print (background ('This text has a background that is red', colors.RED))
print (background ('This text has a background that is orange', colors.ORANGE))
print (background ('This text has a background that is yellow', colors.YELLOW))
print (background ('This text has a background that is green', colors.GREEN))
print (background ('This text has a background that is blue', colors.BLUE))
print (background ('This text has a background that is purple', colors.PURPLE))
print (background ('This text has a background that is white', colors.WHITE))

# Custom
print (color ("This color has a custom grey text color", (150, 150, 150))
print (background ("This color has a custom grey background", (150, 150, 150))

# Combination
print (background (color ("This text is blue with a white background", colors.BLUE), colors.WHITE))

これはあなたに与えます:

ColorItの画像

また、これはクロスプラットフォームであり、Mac、Linux、Windowsでテストされていることにも注意してください。

あなたはそれを試してみたいかもしれません:https//github.com/CodeForeverAndEver/ColorIt

注:点滅、斜体、太字などが数日で追加されます。



11

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 ... ")

:あなたは、同じ行に異なる色をしたい場合は、呼び出しの間で標準出力ストリームをフラッシュprint("%X --> %s" % (color, "Have a fine day!"), end='', flush=True)
user2023861

11

Djangoを使用している場合

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

スナップショット:

画像

(通常、runserverターミナルでのデバッグには色付きの出力を使用するため、追加しました。)

あなたのマシンにインストールされているかどうかをテストできます:
$ python -c "import django; print django.VERSION"
インストールするためのチェック:Djangoのインストール方法

試してみる!!


10

これがcursesの例です:

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)

コードはWindows(x64)では次のエラーで失敗します:AttributeError: 'module' object has no attribute 'wrapper'
sorin

1
@Sorin Sbarnea:docs.python.org/library/curses.htmlのpython curses公式ドキュメントに従って、cursesモジュールはWindowsではサポートされていません。テストファイルに「curses.py」という名前を付けて自分自身をインポートしているため、「No Such Module」などの代わりにこのエラーが発生した可能性があります。
nosklo 2009

10

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')

10

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

アスキーキャスト:

アスキーノイズの中で虹色のテキスト


10

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'])

「Hello、world!」を出力します 青の単語と感嘆符が太字の赤で点滅します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.