【问题标题】:Retrieving stdout from subprocess in Windows从 Windows 中的子进程检索标准输出
【发布时间】:2011-04-01 02:47:12
【问题描述】:

我可以使用 subprocess.Popen 调用 FFmpeg 并检索我需要的数据,因为它发生(以获得进度),但只能在控制台中。我环顾四周,发现您无法“实时”获取数据when running with pythonw。然而,等到进程完成来检索数据是没有实际意义的,因为我试图在 FFmpeg 周围包装一个 PyQT GUI,这样我就可以有漂亮的进度条等等。所以问题是,你可以在使用 pythonw 时从子进程调用中检索“实时”数据吗?

我还没有尝试过简单地使用 py2exe 将应用程序编译为 Windows 应用程序,这样可以解决问题吗?

【问题讨论】:

  • 您链接的问题向您展示了如何将管道与子流程一起使用——您尝试过吗?发生了什么?

标签: python windows ffmpeg pyqt subprocess


【解决方案1】:
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()

【讨论】:

  • 这解决了这个问题。我实际上使用了几乎完全相同的代码,但是,我没有抓住标准错误,因此它给了我无效的标题问题。在添加 stderr 后,它起作用了。谢谢!
【解决方案2】:

在调用 subprocess.Popen 时,使用 stdout=subprocess.PIPE。然后你就可以读取进程的.stdout了。

【讨论】:

    猜你喜欢
    • 2013-03-20
    • 2020-07-05
    • 2016-11-17
    • 1970-01-01
    • 1970-01-01
    • 2021-03-16
    • 1970-01-01
    • 2011-08-29
    • 1970-01-01
    相关资源
    最近更新 更多