rich.prompt.Confirm 不适用于 rich.Progress 上下文 python

byt*_*hon 5 python progress-bar rich

我正在开发一个使用 arich.Progress用于渲染进度条的应用程序。问题rich.prompt.Confirm只是闪烁,而不是在上下文中显示消息并要求确认Progress

演示代码

from rich.progress import Progress
from rich.prompt import Confirm
from time import sleep

with Progress() as progress:
    task = progress.add_task('Cooking')
    while not progress.finished:
        if Confirm.ask('Should I continue', default=False):
            progress.update(task, advance=0.6)
            sleep(0.4)
Run Code Online (Sandbox Code Playgroud)

编辑:我已经看到了 git 问题并进行了一些研究,似乎input(使用的rich.Prompt)不适用于任何使用rich.Live(使用的rich.Progress)的东西。所以现在我的问题是,如何构建代码以便不在rich.Progress上下文管理器中放置提示。或者这个问题的任何可能的解决方法。

Mic*_*sen 2

因此,从Github 问题(这可能是您谈论的问题)开始,这现在是一种解决方法,感谢 Leonardo Cencetti。解决方案很简单。他暂停进度并清除进度线。当你完成后,他会再次开始进度。

对于未来的人来说,这是他的代码:

from rich.progress import Progress
class PauseProgress:
    def __init__(self, progress: Progress) -> None:
        self._progress = progress

    def _clear_line(self) -> None:
        UP = "\x1b[1A"
        CLEAR = "\x1b[2K"
        for _ in self._progress.tasks:
            print(UP + CLEAR + UP)

    def __enter__(self):
        self._progress.stop()
        self._clear_line()
        return self._progress

    def __exit__(self, exc_type, exc_value, exc_traceback):
        self._progress.start()
Run Code Online (Sandbox Code Playgroud)

在 MWC 中,它的用法如下:

from rich.progress import Progress
from rich.prompt import Confirm
from time import sleep

with Progress() as progress:
    task = progress.add_task('Cooking')
    while not progress.finished:
        with PauseProgress(progress):
            ok_to_go = Confirm.ask('Should I continue', default=False)
        if not ok_to_go:
            break
        progress.update(task, advance=0.6)
        sleep(1)
Run Code Online (Sandbox Code Playgroud)