在使用tqdm进度条前打印信息

6
在我的 Python 项目中,我使用了 tqdm 模块来显示进度条。我想在进度条前一行打印一个持续的消息。 set_description 方法可以在同一行上打印信息,而 tqdm.write 则会创建一新行。
使用 set_description $ python pbar.py {Task_1 message} 3%|████ ] 是否有可能实现以下效果? $ python pbar.py {Task_1 message} 3%|████ ] 编辑:
from tqdm import tqdm

pbar = tqdm(m_list)
for item in m_list:
   # Do work
   pbar.update(1)
pbar.close()
2个回答

6

一个带循环的简单示例:

import tqdm,time

for i in tqdm.tqdm(range(9),desc="{Task_1 message}"):
    time.sleep(0.1)

最终输出:
{Task_1 message}: 100%|##############################################| 9/9 [00:00<00:00,  9.99it/s]

如果您在描述中添加\n,它会破坏您的输出,就像这样:
{Task_1 message}
{Task_1 message}                                            | 0/9 [00:00<?, ?it/s]
{Task_1 message}                                    | 1/9 [00:00<00:00,  9.99it/s]
{Task_1 message}#                                   | 2/9 [00:00<00:00,  9.99it/s]
{Task_1 message}######                              | 3/9 [00:00<00:00,  9.99it/s]
{Task_1 message}###########                         | 4/9 [00:00<00:00,  9.99it/s]
{Task_1 message}################                    | 5/9 [00:00<00:00,  9.99it/s]
{Task_1 message}#####################               | 6/9 [00:00<00:00,  9.96it/s]
{Task_1 message}##########################          | 7/9 [00:00<00:00,  9.97it/s]
{Task_1 message}###############################     | 8/9 [00:00<00:00,  9.98it/s]
: 100%|#############################################| 9/9 [00:00<00:00,  9.98it/s]

您唯一能做的就是先打印描述,然后在没有描述的情况下运行任务,因为您只能在终端中删除当前行。

import tqdm,time

print("{Task_1 message}")
for i in tqdm.tqdm(range(9)):
    time.sleep(0.1)

如先前所述,您只能在终端中删除当前行(使用\r),关于这种限制有许多相关主题。

另一种选择是使用curses,但这是完全不同的方法。


目前有一个tqdm的实验性插件可以支持多行进度条,但是它还不够稳定,不能用于生产环境! - gaborous

0

这是一个可能的解决方法,对我起作用了:

print("Your message", flush=True)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接