控制台标记¶

发布时间 2023-09-13 12:03:51作者: linux星

控制台标记

Rich 支持一个简单的标记,您可以使用它插入颜色和样式,几乎可以在 Rich 接受字符串(例如和)的任何地方插入颜色和样式。

运行以下命令以查看一些示例:

python -m rich.markup

语法

控制台标记使用受 bbcode 启发的语法。如果您将样式(请参阅样式)写在方括号中,例如,该样式将一直适用,直到它以相应的 .[bold red][/bold red]

下面是一个简单的示例:

from rich import print
print("[bold red]alert![/bold red] Something happened")

如果不关闭样式,它将一直应用到字符串的末尾。如果您想设置单行样式,这有时很方便。例如:

print("[bold italic yellow on red blink]This text is impossible to read")

有一个关闭样式的简写。如果从结束标记中省略样式名称,Rich 将关闭最后一个样式。例如:

print("[bold red]Bold and red[/] not bold or red")

这些标记标记可以相互组合使用,不需要严格嵌套。以下示例演示了标记标记的重叠:

print("[bold]Bold[italic] bold and italic [/bold]italic[/italic]")

错误

如果标记包含以下错误之一,则 Rich 将引发:MarkupError

  • 标签不匹配,例如"[bold]Hello[/red]"

  • 没有用于隐式关闭的匹配标签,例如"no tags[/]"

逃避

有时,您可能希望打印 Rich 会解释为标记的内容。您可以通过在标签前面加上反斜杠来转义标签。下面是一个示例:

>>> from rich import print
>>> print(r"foo\[bar]")
foo[bar]

如果没有反斜杠,Rich 将假定这是一个标签,如果没有“bar”样式,则会将其从输出中删除。[bar]

注意

如果要防止反斜杠转义标签并在标签之前输出文本反斜杠,则可以输入两个反斜杠。

该函数将为您处理文本转义。

如果使用或 f 字符串(例如)动态构造控制台标记,则转义很重要。在不转义的情况下,可以在您不需要标签的地方注入标签。请考虑以下函数:str.format

def greet(name):
    console.print(f"Hello {name}!")

呼叫将打印问候语,但如果您要呼叫,则还会收到闪烁的文本,这可能是不希望的。解决方案是转义参数:greet("Will")greet("[blink]Gotcha![/blink]")

from rich.markup import escape
def greet(name):
    console.print(f"Hello {escape(name)}!")

表情符号

如果您将表情符号代码添加到标记中,它将替换为等效的 unicode 字符。表情符号代码由用冒号括起来的表情符号的名称组成 (:)。下面是一个示例:

>>> from rich import print
>>> print(":warning:")
⚠️

某些表情符号有两种变体,“表情符号”变体以全彩色显示,“文本”变体以单色显示(无论您的默认颜色设置为什么)。您可以通过在表情符号代码中添加“-表情符号”或“-text”来指定所需的变体。下面是一个示例:

>>> from rich import print
>>> print(":red_heart-emoji:")
>>> print(":red_heart-text:")

若要查看所有可用表情符号的列表,请运行以下命令:

python -m rich.emoji

呈现标记

默认情况下,当您将字符串显式传递给控制台标记时,Rich 将呈现控制台标记,或者当您将字符串嵌入另一个可呈现对象(如 or )中时,Rich 将隐式呈现控制台标记。print()

控制台标记很方便,但如果语法与要打印的字符串冲突,您可能希望禁用它。可以通过设置方法或构造函数来执行此操作。markup=Falseprint()

标记接口

可以通过调用 将字符串转换为带样式的文本,这将返回可以打印或添加更多样式的实例。