如何通过with语句从另一个Python脚本调用rich.progress进度条?
解决Rich进度条拆分到独立文件后不显示的问题
问题原因
你自定义的init_progress上下文管理器仅返回了Progress实例,但没有触发Progress自身的上下文管理流程。Progress作为上下文管理器时,__enter__方法会启动进度条的渲染循环,__exit__方法会完成资源清理;直接yield实例的话,这些关键步骤没有执行,导致终端无法显示进度条。
修复方法
修改task_progress.py中的init_progress函数,在内部先进入Progress的上下文,再yield实例:
from rich.progress import * import contextlib @contextlib.contextmanager def init_progress(): # 先启动Progress的上下文管理流程 with Progress(BarColumn(), TaskProgressColumn(), TimeElapsedColumn()) as progress: yield progress
额外优化(可选)
原代码中每次循环都调用add_task会创建20个独立任务,这通常不是预期行为。建议改为仅创建一个任务,在循环中更新任务的进度和描述:
import time from task_progress import init_progress with init_progress() as progress: total = 20 # 初始化单个任务 task = progress.add_task("[green]Processing Algorithm...", total=total) for x in range(total): # 更新进度和当前描述 progress.update(task, advance=1, description=f"[green]Processing Algorithm-{x}.") time.sleep(0.1)
内容的提问来源于stack exchange,提问作者Pawan
相关产品推荐
相关产品推荐

