在控制台上打印进度条而不使用for -loop

时间:2014-05-13 10:41:50

标签: python python-2.7

我有一个用python编写的脚本,我有一个声明:

Process.open() //some parameters

执行命令并将输出放在控制台上,

我不知道执行上述语句所花费的时间,上述语句将被一个函数调用以完成一系列命令执行,并且没有像“进度条”中的典型示例那样使用for循环在python示例“。

现在,我的问题是可以打印进度条以显示此方案中python中1..100%的进度完成情况吗?

1 个答案:

答案 0 :(得分:2)

subprocess模块允许您将管道附加到生成进程的stdout和stderr。它有点复杂但如果您非常了解该过程的输出,则可以按特定间隔轮询通过管道生成的输出,然后相应地增加进度条。那么,如果该过程仍然生成控制台输出,为什么不在那里实现进度条?

编辑以显示如何完成此操作。 args是包含命令及其参数的列表。

import subprocess
sub = subprocess.Popen(args, bufsize=-1, stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True)
while sub.poll() is None:
    output = sub.stdout.read() # get all of current contents
    if output:
        # ... process output and decide how far the process has advanced
        # ... advance your progressbar accordingly
    else:
        time.sleep(1E-01) # decide on a reasonable number of seconds to wait before polling again
if sub.returncode != 0:
    err = sub.stderr.read()
    # ... decide what to do

如果您可以修改子流程,我建议您在那里进行。