Python CLI 进度条/旋转器,无需迭代

标签 python python-3.x progress-bar black-box

关于 Python 脚本执行时终端中进度条的显示,存在许多现有问题,但每个问题都基于执行操作然后更新进度图形的循环。

不幸的是,我想要显示其进度的函数(或者至少是一个旋转器对象来显示它正在工作)是一个我无法(至少真的、真的不应该)改变的黑匣子。本质上,我想做的是:

#pseudocode input
print('Loading')
spinner.begin()
blackbox() #a few thousand operations happen in here
spinner.end()
print('Finished')

#pseudocode output
Loading.
Loading..
Loading...
Loading.
Loading..
Loading...
Finished

尽管理想情况下,这将是省略号的动画,而不是打印多行。在我开始构建愚蠢的 ASCII 动画之前,有一个主要障碍:

有没有办法同时运行spinnerblackbox()?或者,是否有一种方法可以每隔几百毫秒暂停 blackbox()(无论其内容如何),更新旋转器图形,然后从中断处恢复?

我已经用 progress 尝试过此操作模块,但运气不好...我什至无法让示例代码工作,它只是在我开始迭代后挂起,直到我按 Ctrl+C 退出。

最佳答案

我喜欢使用alive_progress为此。

alive_bar spinner

from typing import ContextManager, Optional
from alive_progress import alive_bar

def spinner(title: Optional[str] = None) -> ContextManager:
    """
    Context manager to display a spinner while a long-running process is running.

    Usage:
        with spinner("Fetching data..."):
            fetch_data()

    Args:
        title: The title of the spinner. If None, no title will be displayed.
    """
    return alive_bar(monitor=None, stats=None, title=title)

安装:pip install alive-progress

关于Python CLI 进度条/旋转器,无需迭代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44851940/

相关文章:

python - 在 Python 中打印进度条处理

python - 获取输入的文本,如果文本大量则退出(tkinter)

python-3.x - 如何从远程python服务连接到CDH集群

Android:窗口标题中的进度条不显示

python - 操作系统错误: port/proto not found in for loop

python - 安装 Anaconda 后如何读取 .py 文件?

Python Pillow 无法在 raspbian 上工作

python - 类变量根据其类型而表现不同(共享或不共享)

python-3.x - 如何通过查询获取用户在 SQLite3 中的排名/位置?

c# - 两个timer_tick事件是否不能并行读取相同的数据但执行不同的任务?