Skip to content

Latest commit

 

History

History
418 lines (278 loc) · 16.3 KB

README.pl.md

File metadata and controls

418 lines (278 loc) · 16.3 KB

Supported Python Versions PyPI version

Downloads codecov Rich blog Twitter Follow

Logo

English readme简体中文 readme正體中文 readmeLengua española readmeDeutsche readmeLäs på svenska日本語 readme한국어 readmeFrançais readmeSchwizerdütsch readmeहिन्दी readmePortuguês brasileiro readmeItalian readmeРусский readmeIndonesian readmeفارسی readmeTürkçe readmePolskie readme

Rich to bilbioteka Pythona dla tekstów rich i pięknego formatowania w terminalu.

Rich API sprawia, że dodanie kolorów i stylów do wyjścia terminala jest proste. Rich może również wyświetlać ładne tabele, paski postępu, markdown, podświetlenie składni kodu źródłowego, ślady wsteczne (tracebacki), i jeszcze więcej - od ręki.

Features

Wprowadzenie wideo do Richa na calmcode.io stworzonym przez @fishnets88.

Zobacz co inni mówią o Richu.

Kompatybilność

Rich działa na systemach operacyjnych Linux, OSX i Windows. True color / emoji współgra z nowym Terminalem Windows, klasyczny terminal jest ograniczony do 16 kolorów. Rich wymaga Pythona 3.7 lub nowszego.

Rich działa z notatnikami Jupyter bez potrzeby dodatkowej konfiguracji.

Instalacja

Zainstaluj z użyciem pip lub twojego ulubionego menedżera pakietów PyPI.

python -m pip install rich

Uruchom komendę poniżej aby przetestować wyjście Rich na twoim terminalu:

python -m rich

Rich Print

By bezproblemowo dodać wyjście rich do twojej aplikacji, możesz zaimportować metodę rich print, która ma tą samą sygnaturę jak wbudowana funkcja Pythona. Wypróbuj:

from rich import print

print("Hello, [bold magenta]World[/bold magenta]!", ":vampire:", locals())

Hello World

Rich REPL

Rich może zostać zainstalowany w REPL, żeby wszystkie struktury danych były ładnie wypisane i podświetlone.

>>> from rich import pretty
>>> pretty.install()

REPL

Używanie konsoli

Dla większej kontroli nad bogatą zawartością terminala, zaimportuj i skonstruuj objekt Console.

from rich.console import Console

console = Console()

Objekt Console ma metodę print, mającą celowo podobny interfejs do wbudowanej funkcji print. Tu jest przykład użycia:

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

Jak można się spodziewać wyświetli to "Hello World!" do terminala. Warto zauważyć, że Rich automatycznie zawija tekst, aby mieścił się on w szerokości terminala.

Jest kilka możliwości dodania koloru i stylu do wyjścia terminala. Możesz ustawić styl dla całego wyjścia, dodając argument style. Na przykład:

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

Wyjście będzie wyglądało tak:

Hello World

Jest to w porządku dla stylizacji jednej linijki tekstu. Dla dokładniejszej stylizacj, Rich wyświetla specjalny format markup podobny w składni do bbcode. Przykład poniżej:

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

Console Markup

Możesz użyć objektu Console, aby wygenerować skomplikowane wyjście bez problemu. Więcej informacji odnośnie Console API w dokumentacji.

Rich Inspect

Rich ma funkcję inspect, która może produkować raporty na jakimkolwiek objekcie Python, jak np. klasa, instancja, lub wbudowana funkcja.

>>> my_list = ["foo", "bar"]
>>> from rich import inspect
>>> inspect(my_list, methods=True)

Log

Więcej informacji na temat funkcji inspect w dokumentacji.

Biblioteka Rich

Rich zawiera wiele wbudowanych renderables, które możesz użyć do stworzenia eleganckiego wyjścia w twoim CLI i pomóc ci w debugowaniu twojego kodu.

Kliknij poniższe nagłówki, żeby poznać detale:

Log

Objekt Console ma metodę log(), mającą podobny interfejs do print(), ale wyświetla również kolumnę zawierającą aktualny czas oraz plik i linijkę, która wywołała powyższą metodę. Domyślnie Rich podświetla składnię dla struktur Pythona i ciągów repr. Jeśli zlogujesz kolekcję (czyli listę list lub słownik dict), Rich ją ładnie wypisze tak, żeby zmieściła się w dostępnym miejscu. Poniżej znajduje się przykład tych funkcji.

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

Powyższy kod wyświetla poniższy tekst:

Log

Istnieje argument log_locals, który wyświetla tabelę zawierającą zmienne lokalne z kąd wywołano metodę log.

Metoda log może być używana do logowania do terminala dla długo działających aplikacji takich jak serwery, ale jest również bardzo dobrą pomocą w debugowaniu.

Handler Logów

Możesz także użyć wbudowanej klasy Handler, aby zformatować i pokolorować wyjście z modułu logging Pythona. Przykład poniżej:

Logging

Emoji

Żeby wstawić emoji do wyjścia konsoli, umieść jego nazwę pomiędzy dwoma dwukropkami, na przykład:

>>> console.print(":smiley: :vampire: :pile_of_poo: :thumbs_up: :raccoon:")
😃 🧛 💩 👍 🦝

Korzystaj z tej funkcji rozsądnie.

Tabele

Rich może wyświetlać elastyczne tabele ze znakami unicode box. Istnieje duża różnorodność opcji formatowania, stylów, wyrównywania komórek itp.

table movie

Powyższa animacja została wygenerowana z table_movie.py w folderze examples.

Poniżej prostszy przykład:

from rich.console import Console
from rich.table import 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(
    "Dec 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)

Ten kod wyświetla poniższy tekst:

table

Markup konsoli jest renderowany w ten sam sposób co print() i log(). Tak naprawdę wszystko co może być wyświetlone przez Richa może być zawarte w nagłówkach / wierszach (nawet inne tabele).

Klasa Table jest na tyle mądra, że zmienia wielkość kolumn, aby zmieścić się w dostępnej szerokości terminala, zawijając tekst jeśli potrzeba. Poniżej ten sam przykład z mniejszą wielkością terminala:

table2

Paski Postępu

Rich może renderować wiele niemrugających pasków postępu, aby można było śledzić długo trwające zadania.

Dla podstawowego użycia, owiń jakąkolwiek sekwencję w funkcji track i iteruj nad wynikiem. Przykład poniżej:

from rich.progress import track

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

Nie jest trudniejsze dodanie wielu pasków postępu. Poniżej przykład z dokumentacji:

progress

Kolumny mogą być skonfigurowane, tak aby wyświetlać jakiekolwiek detale chcesz. Wbudowane kolumny zawierają stopień ukończenia (w %), wielkość pliku, szybkość operacji i pozostały czas. Poniżej kolejny przykład pokazujący pobieranie w toku.

progress

Możesz wypróbować tę funkcję samemu, patrz examples/downloader.py, który może pobierać wiele URLów jednocześnie, pokazując postęp.

Status

W sytuacjach, gdzie ciężko jest wyliczyć postęp, można użyć metody status, która wyświetli animację 'spinnera' i wiadomość. Animacja nie przeszkodzi ci w używaniu konsoli normalnie. Przykład poniżej:

from time import sleep
from rich.console import Console

console = Console()
tasks = [f"task {n}" for n in range(1, 11)]

with console.status("[bold green]Working on tasks...") as status:
    while tasks:
        task = tasks.pop(0)
        sleep(1)
        console.log(f"{task} complete")

Generuje to następującą linijkę.

status

Animacje spinnera zostały zapożyczone z cli-spinners. Możesz wybrać spinnera określając parametr spinner. Wykonaj następującą komendę, aby zobaczyć dostępne wartości:

python -m rich.spinner

To polecenie generuje następujący tekst:

spinners\

Tree

Rich może renderować drzewo - tree zgodnie z wytycznymi. Drzewo jest idealne do wyświetlania struktury pliku, albo jakiekolwiek inne dane hierarchiczne.

Etykiety drzewa mogą być prostym tekstem albo czymkolwiek innym, co może wyświetlić Rich. Wykonaj poniższe polecenie dla demonstracji:

python -m rich.tree

To polecenie generuje następujący tekst:

markdown

W pliku tree.py znajduje się przykład skryptu wyświetlającego widok drzewa jakiegokolwiek folderu, podobnie do linuxowej komendy tree.

Kolumny

Rich może wyświetlać zawartość w schludnych kolumnach z równą, lub optymalną szerokością. Poniżej znajduje się bardzo podstawowy klon komendy (MacOSa / Linuxa) ls, która wyświetla zawartość folderu w kolumnach:

import os
import sys

from rich import print
from rich.columns import Columns

directory = os.listdir(sys.argv[1])
print(Columns(directory))

Poniższy zrzut ekranu prezentuje wyjście przykładu kolumn, wyświetlającego dane pobrane z API w kolumnach:

columns

Markdown

Rich może renderować markdown i wykonuje niezłą pracę tłumaczenia formatowania do terminalu.

Aby wyrenderować markdown, zaimportuj klasę Markdown i skonstruuj z ciągiem zawierającym kod markdown. Potem wydrukuj ją do konsoli. Przykład poniżej:

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)

Ten kod wyświetli tekst w stylu:

markdown

Podświetlanie kodu źródłowego

Rich używa biblioteki pygments, żeby zaimplementować podświetlanie kodu źródłowego. Użycie jest podobne do renderowania markdownu; skonstruuj objekt Syntax i wydrukuj go do konsoli. Przykład poniżej:

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)

Ten kod wyświetli:

syntax

Tracebacki

Rich może renderować piękne tracebacki, będące łatwiejsze do czytania i wyświetlają więcej kodu niż standardowe tracebacki Pythona. Można ustawić Richa jako domyślny handler tracebacków, żeby wszystkie niewyłapane wyjątki (błędy) były renderowane przez Richa. • Polskie readme