Python 在Windows中从子进程检索标准输出
我可以使用subprocess.Popen调用FFmpeg并在数据发生时检索所需的数据(以获得进度),但只能在控制台中进行。我环顾四周,发现你无法“实时”获取数据。然而,等待过程完成以检索数据是没有意义的,因为我正试图围绕FFmpeg包装一个PyQT GUI,这样我就可以有相当多的进度条等等。所以问题是,在使用pythonw时,能否从子流程调用中检索“实时”数据Python 在Windows中从子进程检索标准输出,python,windows,ffmpeg,pyqt,subprocess,Python,Windows,Ffmpeg,Pyqt,Subprocess,我可以使用subprocess.Popen调用FFmpeg并在数据发生时检索所需的数据(以获得进度),但只能在控制台中进行。我环顾四周,发现你无法“实时”获取数据。然而,等待过程完成以检索数据是没有意义的,因为我正试图围绕FFmpeg包装一个PyQT GUI,这样我就可以有相当多的进度条等等。所以问题是,在使用pythonw时,能否从子流程调用中检索“实时”数据 我还没有尝试将py2exe简单地编译为windows应用程序,这能解决问题吗?在调用subprocess.Popen时,使用stdou
我还没有尝试将py2exe简单地编译为windows应用程序,这能解决问题吗?在调用subprocess.Popen时,使用
stdout=subprocess.PIPE
。然后,您将能够读取进程的.stdout
在对subprocess.Popen的调用中,使用stdout=subprocess.PIPE
。然后,您将能够从流程的.stdout
中阅读您链接的问题,该问题向您展示了如何将管道与子流程一起使用--您尝试过吗?发生了什么事?您链接的问题向您展示了如何在子流程中使用管道--您尝试过吗?发生了什么?这解决了问题。我实际上使用了几乎完全相同的代码,但是,我没有抓住stderr,因此它给了我无效的头问题。在添加stderr之后,它就工作了。谢谢这解决了问题。我实际上使用了几乎完全相同的代码,但是,我没有抓住stderr,因此它给了我无效的头问题。在添加stderr之后,它就工作了。谢谢
process = subprocess.Popen(your_cmd, shell=true, stdout=subprocess.PIPE,
stderr=subprocess.STDOUT)
count=0
while True:
buff = process.stdout.readline()
if buff == '':
count += 1
if buff == '' and process.poll() != None:
break
sys.stdout.write(buff)
process.wait()