PythonでターミナルをRichにする
ターミナルは暗い。Pythonでバックエンド開発をしていると日々真っ暗な画面を凝視することになり、性格も人生も暗くなります。
そこに光明を差すライブラリを見つけました。Richです。Richを使うことによって、真っ暗なターミナルを色とりどりのフォントと絵文字で明るい人生を送ることができるようになります。
What is Rich?
Richはターミナルにリッチなテキストを美しく整形して出力するPythonライブラリです。
Pythonの標準出力、ログの両方をきれいに表示することができるようになります。しかも絵文字も使えます。
Richは以下で公開されています。
Richになりましょう!
Rich入門
インストールは簡単です。すぐRichになれます。
pip install rich
これでRichになれました。続いてRichな生き方を学びましょう。
以下でRichな生き方が示されます。
python -m rich
すごいRichです。
Rich生活
もう少しRichになってみましょう。標準出力をRichにします。
import rich
from rich import pretty, print
from rich.console import Console
console = Console()
pretty.install()
print(1, 0.4, "I am Rich!", "私はRich!", ":smiley:")
console.print(1, 0.4, "I am Rich!", "私はRich!", ":smiley:")
print([1, 2, 3])
print({"a": 0, "b": 1, "c": "a1<aa>", "rich": rich})
とてもRichです! 絵文字が輝いています!
Richは更に、クラスや関数をフォーマットして表示してくれます。intをinspectして表示してみましょう。
from rich import pretty, print, inspect
from rich.console import Console
console = Console()
pretty.install()
print(inspect(int, methods=True))
コンソールログを使えば更にRichなフォーマットで表示することができます。
from rich import pretty, print
from rich.console import Console
console = Console()
pretty.install()
test_data = [
{"jsonrpc": "2.0", "method": "sum", "params": [None, 1, 2, 4, False, True]},
{"jsonrpc": "2.0", "method": "notify_hello", "params": [7]},
{"jsonrpc": "2.0", "method": "subtract", "params": [42, 23]},
]
console.log("Hello from", console, "!")
console.log(test_data, log_locals=True)
本番で使うRich
本番でもRichになるために、例外やloggingフォーマットもRichにしたいと思います。
例外もRichに表示することができます。
from rich import pretty, print
from rich.console import Console
console = Console()
pretty.install()
try:
print(1 / 0)
except Exception as e:
console.print_exception(extra_lines=5, show_locals=True)
エラー内容がすーぱーRichになっています。絶対に見落とすことは有りません。
そしてRichはLoggingHandlerもRichに提供しています。
import rich
from rich import pretty, print
from rich.console import Console
import time
import logging
from rich.logging import RichHandler
logging.basicConfig(
level=logging.DEBUG,
format="%(message)s",
datefmt="[%X]",
handlers=[RichHandler(rich_tracebacks=True)],
)
log = logging.getLogger("rich")
log.info("Hello, World!")
def div(divisor: int, divident: int) -> float:
return divisor / divident
def main():
try:
a = div(2, 1)
log.info(f"2 / 1 = {a}")
b = div(1, 0)
log.info(f"1 / 0 = {b}")
except Exception as e:
log.exception("Rich error!")
if __name__ == "__main__":
main()
ログがRichになりました!
エラーもRichログ仕様になり、可読性の高いエラーになっています。
終わRich
というわけでRichでした。みなさまもRichを使って年末年始をRichに過ごしてください。良いお年を!