gpt4 book ai didi

python - 捕获子进程输出

转载 作者:IT老高 更新时间:2023-10-28 22:22:24 25 4
gpt4 key购买 nike

我了解到在 Python 中执行命令时,我应该使用子进程。我想要实现的是通过 ffmpeg 对文件进行编码并观察程序输出,直到文件完成。 ffmpeg 将进度记录到 stderr。

如果我尝试这样的事情:

child = subprocess.Popen(command, shell=True, stderr=subprocess.PIPE)
complete = False
while not complete:
stderr = child.communicate()

# Get progress
print "Progress here later"
if child.poll() is not None:
complete = True
time.sleep(2)

调用 child.communicate() 后程序不会继续,而是等待命令完成。有没有其他方法可以跟随输出?

最佳答案

communicate() 阻塞直到子进程返回,因此循环中的其余行只会在子进程完成运行后执行。从 stderr 读取也会阻塞,除非你像这样逐个字符地读取:

import subprocess
import sys
child = subprocess.Popen(command, shell=True, stderr=subprocess.PIPE)
while True:
out = child.stderr.read(1)
if out == '' and child.poll() != None:
break
if out != '':
sys.stdout.write(out)
sys.stdout.flush()

这将为您提供实时输出。取自 Nadia 的回答 here .

关于python - 捕获子进程输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2525263/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com