今日は皆さんに非常に美しいターミナルツール - Rich をおすすめします。
Rich は Python ライブラリで、ターミナルでリッチテキストや美しいフォーマットを提供します。
Rich API を使用すると、ターミナルにさまざまな色や異なるスタイルを簡単に出力できます。美しいテーブル、プログレスバー、Markdown、構文を強調表示したソースコードやトレースバックなど、優れた機能が数多くあります。
1.Rich の互換性
Rich は Linux、OSX、Windows に対応しています。新しい Windows ターミナルと一緒に使用でき、Windows のクラシックターミナルは 8 色に制限されています。
Rich は Jupyter Notebook とも使用でき、追加の設定は不要です。
2.Rich インストール手順
以下のいずれかの方法でコマンドを入力して依存関係をインストールしてください:
1.Windows 環境 Cmd を開く (スタート - 実行 - CMD)。
2.MacOS 環境 Terminal を開く (command + スペースで Terminal を入力)。
3.VSCode エディタまたは Pycharm を使用している場合は、画面下部の Terminal を直接使用できます。
1 pip install rich
3.Rich の Print 機能
Rich の出力機能を Python スクリプトプログラムに簡単に追加したい場合は、Rich Print メソッドをインポートするだけで、他の Python の組み込み機能のパラメータと似ています。試してみてください:
from rich import print
print("こんにちは、[bold magenta]世界[/bold magenta]!", ":vampire:", locals())
Rich の Print メソッドを使用して出力された内容は、色付きで強調表示されており、Python の組み込み Print と比較して明らかな利点があります。
4. カスタム Console コンソール出力
Rich ターミナルの内容をさらにカスタマイズしたい場合は、コンソールオブジェクトをインポートして構築する必要があります:
from rich.console import Console
console = Console()
Console オブジェクトには Print メソッドがあり、そのインターフェースは Python の組み込み Print 機能に似ています。試してみてください:
console.print("こんにちは", "世界!")
この時、ターミナルには「こんにちは 世界!」と表示されることに気付くでしょう。組み込みの「print」機能とは異なり、Rich はテキストを自動的に改行してターミナルの幅に合わせます。
出力にカスタムカラーやスタイルを追加する方法はいくつかあります。Style キーワード引数を追加することで、出力全体にスタイルを設定できます。以下はその例です:
console.print("こんにちは", "世界!", style="bold red")
出力は以下のようになります:
この例では、一度に一行のテキストのスタイルを設定しました。より細かく複雑なスタイルを得るために、Rich は特別なマークアップをレンダリングでき、その構文は Bbcode に似ています。以下はその例です:
console.print("意志があれば、[bold cyan]道[/bold cyan]がある。")
5.Console コンソールログ
Console オブジェクトには Log () メソッドがあり、Print () と似たインターフェースを持ち、現在の時間や呼び出されたファイルと行を表示できます。
デフォルトでは、Rich は Python 構造と Repr 文字列に対して構文強調表示を行います。コレクション(辞書やリストなど)をログに記録すると、Rich はそれを美しく印刷し、利用可能なスペースに合わせます。以下はその機能のいくつかの例です:
from rich.console import Console
console = Console()
test_data = [
{"jsonrpc": "2.0", "method": "sum", "params": [None, 1, 2, 4, False, True], "id": "1",},
{"jsonrpc": "2.0", "method": "notify_hello", "params": [7]},
{"jsonrpc": "2.0", "method": "subtract", "params": [42, 23], "id": "2"},
]
def test_log():
enabled = False
context = {
"foo": "bar",
}
movies = ["デッドプール", "スカイウォーカーの夜明け"]
console.log("こんにちは、", console, "!")
console.log(test_data, log_locals=True)
test_log()
上記の例の出力は以下のようになります:
Log_locals パラメータは、log メソッドを呼び出したローカル変数を含むテーブルを出力します。
Log メソッドは、長時間実行されるアプリケーション(サーバーなど)のログをターミナルに記録するためにも、デバッグを補助するためにも使用できます。
Logging 処理クラス
内蔵の処理クラスを使用して、Python ロギングモジュールの出力をフォーマットおよび着色することもできます。以下は出力の例です:
6. 絵文字
名前を二つのコロンの間に置くことで、コンソール出力に絵文字を挿入できます。以下はその例です:
>>> console.print(":smiley: :vampire: :pile_of_poo: :thumbs_up: :raccoon:")
😃 🧛 💩 👍 🦝
この機能は慎重に使用してください。
7. テーブル
Rich には、さまざまなボーダー、スタイル、セルの配置などのフォーマットオプションが含まれています。以下はシンプルな例です:
from rich.console import Console
from rich.table import Column, Table
console = Console()
table = Table(show_header=True, header_style="bold magenta")
table.add_column("日付", style="dim", width=12)
table.add_column("タイトル")
table.add_column("制作予算", justify="right")
table.add_column("興行収入", justify="right")
table.add_row(
"2019年12月20日", "スター・ウォーズ:スカイウォーカーの夜明け", "$275,000,000", "$375,126,118"
)
table.add_row(
"2018年5月25日",
"[red]ソロ[/red]: スター・ウォーズ・ストーリー",
"$275,000,000",
"$393,151,347",
)
table.add_row(
"2017年12月15日",
"スター・ウォーズ エピソード VIII: 最後のジェダイ",
"$262,000,000",
"[bold]$1,332,539,889[/bold]",
)
console.print(table)
この例の出力は以下のようになります:
注意してください、コンソールマークアップの表示方法は print() と log() と同じです。実際、Rich によってレンダリングされたすべての内容は、タイトル/行(さらには他のテーブル)に追加できます。Table クラスは賢く、列のサイズをターミナルの利用可能な幅に合わせて調整し、必要に応じてテキストの折り返しを処理します。以下は同じ例で、出力が上の表よりも小さいターミナルでのものです:
8. プログレスバー
Rich は、長時間実行されるタスクを追跡するために、複数のちらつかないプログレスバーをレンダリングできます。
基本的な使用法:Track 関数を呼び出して結果を反復処理します。以下はその例です:
from rich.progress import track
for step in track(range(100)):
do_step(step)
複数のプログレスバーを追加するのは難しくありません。以下はその効果の例です:
これらの列は、必要な詳細情報を表示するように構成できます。
組み込み列には、完了のパーセンテージ、ファイルサイズ、ファイル速度、残り時間が含まれます。以下は進行中のダウンロードを表示する例です:
進捗を表示しながら複数の URL をダウンロードできます。
9. 列によるデータ出力
Rich は、整然とした、等しいまたは最適な幅の列を通じてコンテンツを表示できます。以下は(macOS / Linux)ls コマンドの非常に基本的なクローンで、列を使ってディレクトリリストを表示します:
import os
import sys
from rich import print
from rich.columns import Columns
directory = os.listdir(sys.argv[1])
print(Columns(directory))
以下のスクリーンショットは、API から取得したデータを表示する列の例の出力です:
10.Markdown
Rich は Markdown をレンダリングでき、かなり良い形式でターミナルに表示します。
Markdown をレンダリングするには、Markdown クラスをインポートし、それをコンソールに印刷します。以下はその例です:
from rich.console import Console
from rich.markdown import Markdown
console = Console()
with open("README.md") as readme:
markdown = Markdown(readme.read())
console.print(markdown)
この例の出力は以下のようになります:
11. 構文強調表示
Rich は Pygments ライブラリを使用して構文ハイライトを実現します。使用法は Markdown のレンダリングに似ています。Syntax オブジェクトを構築し、それをコンソールに印刷します。以下はその例です:
from rich.console import Console
from rich.syntax import Syntax
my_code = '''
def iter_first_last(values: Iterable[T]) -> Iterable[Tuple[bool, bool, T]]:
"""最初と最後の値のフラグを持つタプルを生成する。"""
iter_values = iter(values)
try:
previous_value = next(iter_values)
except StopIteration:
return
first = True
for value in iter_values:
yield first, False, previous_value
first = False
previous_value = value
yield first, True, previous_value
'''
syntax = Syntax(my_code, "python", theme="monokai", line_numbers=True)
console = Console()
console.print(syntax)
出力は以下のようになります:
12. エラートレースバック
Rich は美しいエラートレースバックログをレンダリングでき、標準の Python トレースバックよりも読みやすく、より多くのコードを表示できます。
Rich をデフォルトのトレースバックハンドラとして設定すると、すべての例外が Rich によって表示されます。
以下は OSX(Linux と似た外観)での例です: