Python 在Windows中从子进程检索标准输出

Python 在Windows中从子进程检索标准输出,python,windows,ffmpeg,pyqt,subprocess,Python,Windows,Ffmpeg,Pyqt,Subprocess,我可以使用subprocess.Popen调用FFmpeg并在数据发生时检索所需的数据(以获得进度),但只能在控制台中进行。我环顾四周,发现你无法“实时”获取数据。然而,等待过程完成以检索数据是没有意义的,因为我正试图围绕FFmpeg包装一个PyQT GUI,这样我就可以有相当多的进度条等等。所以问题是,在使用pythonw时,能否从子流程调用中检索“实时”数据 我还没有尝试将py2exe简单地编译为windows应用程序,这能解决问题吗?在调用subprocess.Popen时,使用stdou

我可以使用subprocess.Popen调用FFmpeg并在数据发生时检索所需的数据(以获得进度),但只能在控制台中进行。我环顾四周,发现你无法“实时”获取数据。然而,等待过程完成以检索数据是没有意义的,因为我正试图围绕FFmpeg包装一个PyQT GUI,这样我就可以有相当多的进度条等等。所以问题是,在使用pythonw时,能否从子流程调用中检索“实时”数据


我还没有尝试将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()