こんにちは、鉄火巻です。
プログラムを作っていて、結果の表示やデバック用に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するたびに初期化も書いてあげないといけないのが難点ですね。
とはいえ、装飾したほうが他人に渡すときは見やすくていいかもね。
もちろん、配色にもよると思うけど。
それでは、鉄火巻きでした。