如何将 Rich 与 Python curses 集成?
How to integrate Rich with Python curses?
我正在考虑使用 python curses
和 rich
库创建一个 CLI 应用程序。由于 curses
需要 addstr
方法将文本打印为字符串,因此我无法使用 rich
进行打印。是否可以整合这两个库?
以下代码无效!!
import curses
from curses import wrapper
from rich.console import Console
console = Console()
with console.capture() as capture:
console.print("[bold red]Hello[/] World")
str_output = capture.get()
def main(stdscr):
stdscr.clear()
stdscr.addstr(str_output)
stdscr.refresh()
stdscr.getch()
wrapper(main)
您似乎想将内容从 rich
传输到 curses
,但 print()
函数实际上并未返回任何内容,它只是在终端上创建输出作为副作用执行。
您可以通过查看 type(print("[red]Hello[/red] World!"))
进行验证,即 <class 'NoneType'>
。
那么,如何检索 print(...)
的输出?在 docs for rich 中,他们解释了如何使用控制台 API:
from rich.console import Console
console = Console()
with console.capture() as capture:
console.print("[bold red]Hello[/] World")
str_output = capture.get()
>>> str_output
'\x1b[1;31mHello\x1b[0m World\n'
>>> print(str_output)
Hello World
>>> type(str_output)
<class 'str'>
它允许您访问 print 的输出,然后您可以尝试将该信息通过管道传递给 curses。如果由于颜色转义码在 shell 中的工作方式而重叠它们的颜色上下文,您可能 运行 会因混合 curses
和 rich
而受到一些奇怪的干扰,因此请注意这一点。
这里是 Rich 的作者。 Rich 和 Curses 可能无法很好地结合使用。但是,您可以查看 Textual,这是我正在开发的一个 TUI 框架,它在底层使用了 Rich。
我正在考虑使用 python curses
和 rich
库创建一个 CLI 应用程序。由于 curses
需要 addstr
方法将文本打印为字符串,因此我无法使用 rich
进行打印。是否可以整合这两个库?
以下代码无效!!
import curses
from curses import wrapper
from rich.console import Console
console = Console()
with console.capture() as capture:
console.print("[bold red]Hello[/] World")
str_output = capture.get()
def main(stdscr):
stdscr.clear()
stdscr.addstr(str_output)
stdscr.refresh()
stdscr.getch()
wrapper(main)
您似乎想将内容从 rich
传输到 curses
,但 print()
函数实际上并未返回任何内容,它只是在终端上创建输出作为副作用执行。
您可以通过查看 type(print("[red]Hello[/red] World!"))
进行验证,即 <class 'NoneType'>
。
那么,如何检索 print(...)
的输出?在 docs for rich 中,他们解释了如何使用控制台 API:
from rich.console import Console
console = Console()
with console.capture() as capture:
console.print("[bold red]Hello[/] World")
str_output = capture.get()
>>> str_output
'\x1b[1;31mHello\x1b[0m World\n'
>>> print(str_output)
Hello World
>>> type(str_output)
<class 'str'>
它允许您访问 print 的输出,然后您可以尝试将该信息通过管道传递给 curses。如果由于颜色转义码在 shell 中的工作方式而重叠它们的颜色上下文,您可能 运行 会因混合 curses
和 rich
而受到一些奇怪的干扰,因此请注意这一点。
这里是 Rich 的作者。 Rich 和 Curses 可能无法很好地结合使用。但是,您可以查看 Textual,这是我正在开发的一个 TUI 框架,它在底层使用了 Rich。