将 tqdm 与子进程一起使用

Using tqdm with subprocess

我正在尝试向我参与的开源项目添加进度条功能。该软件以易于使用的方式将多线程命令传递给它。目前,我正在尝试向应用程序添加进度条功能,但无法让进度条停留在底部并进行更新。

我们正在使用以下代码来处理命令:

subprocess.call(task, shell=True)

我目前使用 tqdm.update() 来更新栏的进度,但是它一直在换行打印,使终端看起来很糟糕。

要准确了解我们如何使用 tqdm 包,请参阅下面的 link: https://github.com/codingo/Interlace/blob/master/Interlace/lib/threader.py

最后,我们对这个应用程序的目标是让进度条固定在终端的底部,这样它就不会影响输出并且看起来相当干净。任何帮助,将不胜感激!

通过更改以下内容修复了问题:

    @staticmethod
    def run_task(task):
        subprocess.call(task, shell=True)

进入:

    @staticmethod
    def run_task(task, t):
        s = subprocess.Popen(task, shell=True, stdout=subprocess.PIPE)
        t.write(s.stdout.readline().decode("utf-8"))

这基本上允许我们将任务的所有输出通过管道传输到标准输出,然后使用 UTF-8 解码字节并使用 tqdm.write()

打印出来

工作得很好!