实时展示

发布时间 2023-09-13 13:05:00作者: linux星

进度条和状态指示器使用实时显示来对终端的各个部分进行动画处理。您可以使用该类构建自定义实时显示。

要演示实时显示,请运行以下命令:

python -m rich.live

注意

如果您看到省略号“...”,则表示终端不够高,无法显示整个表格。

基本用法

要创建实时显示,请构造具有可渲染的对象并将其用作上下文管理器。实时显示将在上下文期间持续存在。您可以更新可渲染对象以更新显示:

import time

from rich.live import Live
from rich.table import Table

table = Table()
table.add_column("Row ID")
table.add_column("Description")
table.add_column("Level")

with Live(table, refresh_per_second=4):  # update 4 times a second to feel fluid
    for row in range(12):
        time.sleep(0.4)  # arbitrary delay
        # update the renderable internally
        table.add_row(f"{row}", f"description {row}", "[red]ERROR")

更新可渲染对象

还可以通过调用该方法动态更改可呈现对象。如果要显示的信息过于动态而无法通过更新单个可呈现对象生成,则这可能很有用。下面是一个示例:

import random
import time

from rich.live import Live
from rich.table import Table


def generate_table() -> Table:
    """Make a new table."""
    table = Table()
    table.add_column("ID")
    table.add_column("Value")
    table.add_column("Status")

    for row in range(random.randint(2, 6)):
        value = random.random() * 100
        table.add_row(
            f"{row}", f"{value:3.2f}", "[red]ERROR" if value < 50 else "[green]SUCCESS"
        )
    return table


with Live(generate_table(), refresh_per_second=4) as live:
    for _ in range(40):
        time.sleep(0.4)
        live.update(generate_table())

备用屏幕

您可以通过设置构造函数来选择在“备用屏幕”中显示实时显示。这将允许您的实时显示屏全屏并在退出时恢复命令提示符。screen=True

您可以将此功能与布局结合使用,以显示复杂的终端“应用程序”。

瞬态显示

通常,当您退出实时上下文管理器(或调用)时,最后刷新的项目将保留在终端中,光标位于下一行。 还可以通过设置 Live 构造函数使实时显示在退出时消失。transient=True

自动刷新

默认情况下,实时显示每秒将刷新 4 次。您可以使用构造函数上的参数设置刷新率。 如果您知道您的更新不会那么频繁或更高,则应将其设置为低于 4 以获得更流畅的感觉。refresh_per_second

如果更新不是很频繁,则可能需要完全禁用自动刷新,可以通过设置构造函数来实现。 如果禁用自动刷新,则需要手动调用或使用 。auto_refresh=Falserefresh=True

垂直溢出

默认情况下,如果可渲染对象对于终端来说太大,实时显示将显示省略号。可以通过在构造函数上设置参数来调整此设置。vertical_overflow

  • “裁剪” 显示可渲染到终端高度。其余的都是隐藏的。

  • “省略号” 与裁剪类似,但终端的最后一行替换为“...”。这是默认行为。

  • “可见” 将允许显示整个可渲染内容。请注意,在此模式下无法正确清除显示。

注意

一旦实时显示停止在非瞬态可渲染对象上,最后一帧将渲染为可见,因为它不必被清除。

重定向标准输出/标准输出

为了避免破坏实时显示视觉对象,Rich 将重定向,以便您可以使用内置语句。 默认情况下启用此功能,但您可以通过设置 或 来禁用。stdoutstderrprintredirect_stdoutredirect_stderrFalse

筑巢生活

请注意,任何时候只能有一个实时上下文处于活动状态。以下内容将引发 因为状态也使用 Live:LiveError

with Live(table, console=console):
    with console.status("working"):  # Will not work
        do_work()

实际上,这很少是一个问题,因为您可以在实时上下文中显示可渲染对象的任意组合。