将 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()
打印出来
工作得很好!
我正在尝试向我参与的开源项目添加进度条功能。该软件以易于使用的方式将多线程命令传递给它。目前,我正在尝试向应用程序添加进度条功能,但无法让进度条停留在底部并进行更新。
我们正在使用以下代码来处理命令:
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()
打印出来工作得很好!