banner
andrewji8

Being towards death

Heed not to the tree-rustling and leaf-lashing rain, Why not stroll along, whistle and sing under its rein. Lighter and better suited than horses are straw sandals and a bamboo staff, Who's afraid? A palm-leaf plaited cape provides enough to misty weather in life sustain. A thorny spring breeze sobers up the spirit, I feel a slight chill, The setting sun over the mountain offers greetings still. Looking back over the bleak passage survived, The return in time Shall not be affected by windswept rain or shine.
telegram
twitter
github

忘記print吧,今天開始用這個專屬Python開發者的完美終端工具,親測有效!

今天給大家推薦一個非常精美的終端工具 - Rich

Rich 是一個 Python 庫,可以為你在終端中提供富文本和漂亮、精美的格式。

使用 Rich API 可以很容易的在終端輸出添加各種顏色和不同風格。它可以繪製漂亮的表格,進度條,Markdown,突出顯示語法的源代碼及回溯等等,優秀的功能不勝枚舉。

image
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())

image
可以看到,基於 Rich 的 Print 方法輸出的內容都是帶顏色、帶重點的,相比於 Python 自帶的 Print 有明顯的優勢。

4. 自定義 Console 控制台輸出
想要對 Rich 終端內容進行更多的自定義設置,你需要導入並構造一個控制台對象:

from rich.console import Console

console = Console()

Console 對象含有一個 Print 方法,它的界面與 Python 內置的 Print 功能相似。你可以試試:

console.print("Hello", "World!")

你可能已經料到,這時終端上會顯示 “Hello World!”,請注意,與內置的 “打印” 功能不同,Rich 會將文字自動換行以適合終端寬度。

有幾種方法可以為輸出添加自定義顏色和樣式。你可以通過添加 Style 關鍵字參數來為整個輸出設置樣式。例子如下:

console.print("Hello", "World!", style="bold red")

輸出如下圖:

image
這個範例一次只設置了一行文字的樣式。如果想獲得更細膩更複雜的樣式,Rich 可以渲染一個特殊的標記,其語法類似於 Bbcode。示例如下:

console.print("Where there is a [bold cyan]Will[/bold cyan] there [u]is[/u] a [i]way[/i].")

image

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()

以上範例的輸出如下:

image

注意其中的 Log_locals 參數會輸出一個表格,該表格包含調用 log 方法的局部變量。
Log 方法既可用於將長時間運行應用程序(例如伺服器)的日誌記錄到終端,也可用於輔助調試。

Logging 處理程序

你還可以使用內置的處理類來對 Python 日誌記錄模塊的輸出進行格式化和著色。下面是輸出示例:

image
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)

該示例的輸出如下:

image

請注意,控制台標記的呈現方式與 print() 和 log() 相同。實際上,由 Rich 渲染的任何內容都可以添加到標題/行(甚至其他表格)中。Table 類很聰明,可以調整列的大小以適合終端的可用寬度,並能根據需要做文本環繞的處理。下面是相同的示例,輸出與比上表小的終端上:

image

8. 進度條
Rich 可以渲染多個不閃爍的進度條形圖,以跟蹤長時間運行的任務。
基本用法:用 Track 函數調用程序並迭代結果。下面是一個例子:


from rich.progress import track

for step in track(range(100)):
    do_step(step)

添加多個進度條並不難。以下是效果示例:

image

這些列可以配置為顯示你所需的任何詳細信息。
內置列包括完成百分比,文件大小,文件速度和剩餘時間。下面是顯示正在進行的下載的示例:

image
它可以在顯示進度的同時下載多個 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 提取的數據:

image

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)

該例子的輸出如下圖:

image

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)

輸出如下:

image
12. 錯誤回溯 (traceback)
Rich 可以渲染漂亮的錯誤回溯日誌,比標準的 Python 回溯更容易閱讀,並能顯示更多代碼。
你可以將 Rich 設置為默認的回溯處理程序,這樣所有異常都將由 Rich 為你呈現。
下面是在 OSX(與 Linux 類似)上的外觀:

image

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。