今日は皆さんに非常に美しいターミナルツール - 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("Hello, [bold magenta]World[/bold magenta]!", ":vampire:", locals())
ご覧の通り、Rich の Print メソッドで出力された内容はすべて色付きで強調表示されており、Python の組み込み Print よりも明らかに優れています。
4. カスタム Console コンソール出力
Rich ターミナルの内容をさらにカスタマイズしたい場合は、コンソールオブジェクトをインポートして構築する必要があります:
from rich.console import Console
console = Console()
Console オブジェクトには Print メソッドが含まれており、そのインターフェースは Python の組み込み Print 機能に似ています。試してみてください:
console.print("Hello", "World!")
おそらく、ターミナルには「Hello World!」と表示されることに気づくでしょう。組み込みの「print」機能とは異なり、Rich はテキストを自動的に改行してターミナルの幅に合わせます。
出力にカスタムカラーやスタイルを追加する方法はいくつかあります。スタイルを全体の出力に設定するには、Style キーワード引数を追加できます。例は以下の通りです:
console.print("Hello", "World!", style="bold red")
出力は以下の図のようになります:
この例では、一度に一行のテキストスタイルのみを設定しました。より繊細で複雑なスタイルを得たい場合、Rich は特別なマークアップをレンダリングでき、その構文は Bbcode に似ています。例は以下の通りです:
console.print("Where there is a [bold cyan]Will[/bold cyan] there [u]is[/u] a [i]way[/i].")
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 = ["Deadpool", "Rise of the Skywalker"]
console.log("Hello from", 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("Date", style="dim", width=12)
table.add_column("Title")
table.add_column("Production Budget", justify="right")
table.add_column("Box Office", justify="right")
table.add_row(
"Dev 20, 2019", "Star Wars: The Rise of Skywalker", "$275,000,000", "$375,126,118"
)
table.add_row(
"May 25, 2018",
"[red]Solo[/red]: A Star Wars Story",
"$275,000,000",
"$393,151,347",
)
table.add_row(
"Dec 15, 2017",
"Star Wars Ep. VIII: The Last Jedi",
"$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]]:
"""Iterate and generate a tuple with a flag for first and last value."""
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 と似ています)での外観です: