当 7zip 从命令行运行时,它将使用一系列“%”符号打印进度条。

在 Python 中执行 7zip 时,我想捕获并打印此进度条。
我该怎么做呢?

我目前使用的 Python 代码:

from subprocess import Popen, PIPE
pipe = Popen('7za.exe a -tgzip "e:\\backup\\sch Testerr 2012 06 23 17-27.gzip" "E:/archiv"' , stdout=PIPE)
text = pipe.communicate()[0]
print text

最佳答案

你想要的是 sys.stdout.flush()。

但是,您可能需要在单独的线程上执行刷新,因为主线程可能会被阻塞,直到 Popen 中的底层进程完成。

编辑:使用布赖恩的答案来帮助(并避免多线程),我设想了一个这样的解决方案:

from subprocess import Popen, PIPE
pipe = Popen('7za.exe a -tgzip "e:\\backup\\sch Testerr 2012 06 23 17-27.gzip" "E:/archiv"' , stdout=PIPE)

# Assuming Python thread continues after POpen invoke (but before 7za is finished)
while (not pipe.poll()):
    sys.stdout.flush()
    time.sleep(1)

关于python - 从python执行时如何打印和捕获7zip的%进度标记?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11270524/

10-13 03:10