在子进程中使用tqdm

詹姆斯·爱德华兹

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

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

subprocess.call(task, shell=True)

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

要确切了解我们如何使用tqdm软件包,请参见下面的链接: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"))

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

像魅力一样工作!

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章