我有一个用python编写的脚本,我有一个声明:
Process.open() //some parameters
执行命令并将输出放在控制台上,
我不知道执行上述语句所花费的时间,上述语句将被一个函数调用以完成一系列命令执行,并且没有像“进度条”中的典型示例那样使用for循环在python示例“。
现在,我的问题是可以打印进度条以显示此方案中python中1..100%的进度完成情况吗?
答案 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
如果您可以修改子流程,我建议您在那里进行。