tqdm进度条和colorama不能一起使用

7

我希望使用colorama,但是我的代码中已经使用了tqdm。

示例:

import colorama as color
import tqdm as tqdm  # without line it's working
print(color.Fore.GREEN + 'Green text')

如果我不使用tqdm,一切都正常,但如果我导入tqdm,colorama不会着色文本,直到我重新启动控制台。我使用带有Spyder(Python 3.6)的IPython控制台。

有没有办法让我同时使用这些包?

4个回答

2
请按照以下方式尝试(https://github.com/tqdm/tqdm/issues/450):
from tqdm import trange
from colorama import Fore
for i in trange(int(7e7),
    bar_format="{l_bar}%s{bar}%s{r_bar}" % (Fore.GREEN, Fore.RESET)):
    pass

1
import colorama as color
import tqdm as tqdm 
import os

os.system('cls')
print(color.Fore.GREEN + 'Green text')

tqdm在你的终端上有其他活动或之前运行时将无法工作。

因此,在代码开头使用os.system('cls')清除终端屏幕会更好。这对我很有效。


4
虽然这段代码可能解决了问题,但是附上解释说明它如何解决问题以及为什么能够解决问题,有助于提高您的帖子质量,可能会得到更多的赞同。请记住,你的回答是为未来的读者而作,而不仅仅是对目前提问的人。 - David Buck

0
我可以通过以下方式解决这个问题: 在导入后的第一行添加import sys,并将sys.stdout = sys.__stdout__添加为导入语句之后的第一行。
import sys
sys.stdout = sys.__stdout__

这个函数可以返回颜色,而且 tqdm 在工作。我没有使用 COLORAMA,但是直接使用了 ansi 转义序列。
我尝试了这个方法,因为我读到tqdm将 stdout 重定向到 stderr,而它起作用了。
sys.__stdout__ 的值将是脚本刚打开时的 stdout 初始值。导入tqdm会将其重定向。 :)


0
如果在tqdm中包含“colour”可选参数,则它将使用该颜色作为进度条的颜色,然后按预期打印以下彩色文本,但并非所有文本都是彩色的。我还没有调查逻辑是什么,但该参数会改变进一步的打印。

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