将 tqdm 与子流程结合使用

Jam*_*rds 5 python python-3.x tqdm

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

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

subprocess.call(task, shell=True)
Run Code Online (Sandbox Code Playgroud)

我目前使用tqdm.update()更新栏的进度,但是它不断在新行上打印,使终端看起来很糟糕。 显示非粘性进度条的图像

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

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

Jam*_*rds 2

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

    @staticmethod
    def run_task(task):
        subprocess.call(task, shell=True)
Run Code Online (Sandbox Code Playgroud)

进入:

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

这基本上允许我们将任务的所有输出传输到 stdout,然后使用 UTF-8 解码字节并使用 tqdm.write() 打印出来

效果非常好!