【问题标题】:tqdm progressbar and colorama do not work togethertqdm 进度条和 colorama 不能一起使用
【发布时间】:2017-08-23 03:54:04
【问题描述】:

我想使用 colorama,但我已经在我的代码中使用了 tqdm。

例子:

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

没有 tqdm 也可以正常工作,但是如果我导入 tqdm,colorama 不会为文本着色,直到我重新启动控制台。我将 IPython 控制台与 Spyder(Python 3.6)一起使用。

有没有办法可以一起使用这些包?

【问题讨论】:

    标签: python tqdm colorama


    【解决方案1】:

    尝试如下(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
    

    【讨论】:

      【解决方案2】:
      import colorama as color
      import tqdm as tqdm 
      import os
      
      os.system('cls')
      print(color.Fore.GREEN + 'Green text')
      

      如果有任何其他活动正在进行或之前在您的终端上运行过,则 tqdm 不起作用。

      所以最好在代码开始时使用 os.system('cls') 清除终端屏幕。 这对我来说很好。

      【讨论】:

      • 虽然此代码可能会解决问题,including an explanation 关于如何以及为什么解决问题将真正有助于提高您的帖子质量,并可能导致更多的赞成票。请记住,您正在为将来的读者回答问题,而不仅仅是现在提出问题的人。
      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

        import sys
        sys.stdout = sys.__stdout__
        

        这会返回颜色,tqdm 也是 workint。我不使用 COLORAMA,但我直接使用 ansi 转义序列。
        我尝试了这种方法,因为我读到 tqdm 将标准输出重定向到标准错误,并且它有效。
        sys.__stdout__ 的值将是脚本刚打开时 stdout 的初始值。导入 tqdm 会重定向它。 :)

        【讨论】:

          猜你喜欢
          • 2017-05-01
          • 1970-01-01
          • 1970-01-01
          • 2021-07-09
          • 2018-10-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-01-30
          相关资源
          最近更新 更多