termcolorでPythonのprint文に色を付けよう!

こんにちは、鉄火巻です。

プログラムを作っていて、結果の表示やデバック用にprint()をよく利用しています。

しかし、コマンドプロンプトの真っ黒な画面に白文字のみ表示されているため、なんとなくおもしろみがありません。
とはいえ、コマンドプロンプト自体の色やフォントの色を変えるもの違うし…

、と探していたらちょうどいいモジュールを見つけました!

termcolorというモジュールをインストールすると、出力に色を付けることが出来るようです!
pypi: https://pypi.org/project/termcolor/

termcolorの導入

というわけで、さっそく導入していきましょう!

「termcolor」というモジュールをpipからインストールします。

  pip install termcolor

以上でOKです!簡単だね。

Let’s 試用!

ipython上で確認していきましょう。

使い方は、文字列の入った変数に色付けをして新しい変数に入れる、といった感じですかね?

  import termcolor
print(termcolor.colored("a","red"))

以下のようにしても問題なく使えます。こっちの方が短くていいね。

  from termcolor import colored
print(colored("ai", "red"))

すると以下のように色が付く。

これで装飾できました。ぱちぱち。

….

と思ったけど、プログラムに意気揚々と組み込むと上手くいきません。

Windows向けの解決策

どうやらWindowsでは「colorama」というモジュールもインストールする必要があるようです。

参考: https://stackoverflow.com/questions/21858567/why-does-termcolor-output-control-characters-instead-of-colored-text-in-the-wind

読んでみたところ、文字コードの問題CP932ちゃんは自己主張がつよいですね~。

以下のように「colorama」というモジュールを追加でインストールします。

  pip install colorama

また、coloramaを初期化する必要があるので、import辺りに同時に突っ込んでおきましょう。多分、初期化さえされていればどこもよいのでしょう?

  from termcolor import colored, cprint
import colorama
colorama.init()
cprint("aa", "red")

ipythonでなくともちゃんと色付けされて出力出来ることが確認できました!

おめでとう。

大まかな色付けの仕方

色付けの仕方には、cprint()と、colored()の2通りがあります。

基本的に使い方は一緒で、「 cprint() = print() + colored() 」なだけですね。

文字列の一部や、変数に入れた文字列を色付けするときにcolored()の方を使えばいいってかんじですかね?

  cprint("{string}", "{text colors}", "{text highkights}", attrs=["{attributes}"])

例:

※エラー文的にも、「 cprint() = print() + colored() 」はあっているみたいですね。適当にエラーを吐かせると、以下のように表示されます。

  print((colored(text, color, on_color, attrs)), **kwargs)

使える色

色のリストは上記pypiのページにあります。上記から引用。
詳細は上記pypiに行きましょう。

Text colors:

grey

red

green

yellow

blue

magenta

cyan

white

Text highlights:

on_grey

on_red

on_green

on_yellow

on_blue

on_magenta

on_cyan

on_white

Attributes:

bold

dark

underline

blink

reverse

concealed

※attributesはwindows環境ではreverseしか利用できないことに注意。どのattributeがどの環境で利用できるかは、上記pypiのサイトに書いてあります。

上でやったけど、reverseも効いてなくね?謎だね。

一部を色付け

以下のようにしたら一部を無理やり色付けできる。多分簡単な方法はあると思うけど、正直これで問題無く使用できます。

  print(colored("[loop{0}]: ".format(self.looptimes), "red"),"Finish load lib")

まとめ

今回はコマンドプロンプトに色を付けることが出来るようになる「termcolor」を紹介しました。うまく使えば結果の視認性も上昇かもしれないですね。

ただし、Windowsユーザーの方は一緒に「colorama」も導入する必要があるので注意が必要です。若干冗長的になります。


以上です。これで味気のないコマンドプロンプトの画面を煌びやかにすることが出来るようになりました!おめでとう!

ただ、毎回、importするたびに初期化も書いてあげないといけないのが難点ですね。

とはいえ、装飾したほうが他人に渡すときは見やすくていいかもね。
もちろん、配色にもよると思うけど。

それでは、鉄火巻きでした。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です