在Windows中从子进程获取stdout

1 投票
2 回答
3072 浏览
提问于 2025-04-16 03:01

我可以用subprocess.Popen来调用FFmpeg,并实时获取我需要的数据(比如进度),但这只能在控制台中实现。我查了一下,发现当用pythonw运行时,无法获取“实时”的数据。等到进程结束再去获取数据就没什么意义了,因为我想在FFmpeg周围做一个PyQT的图形界面,这样就可以有漂亮的进度条等等。那么问题是,使用pythonw时,能否从子进程调用中获取“实时”的数据呢?

我还没有尝试用py2exe把这个应用程序编译成Windows应用,这样做会解决这个问题吗?

2 个回答

0

在你调用subprocess.Popen的时候,使用 stdout=subprocess.PIPE。这样你就可以从这个进程的 .stdout 中读取数据了。

4

在编程中,有时候我们会遇到一些问题,特别是在使用某些工具或库的时候。这些问题可能会让我们感到困惑,不知道该怎么解决。比如,有人可能会在使用某个特定的功能时,发现它没有按照预期工作。这时候,我们就需要去查找相关的信息,看看有没有人遇到过类似的问题,或者有没有解决方案。

在StackOverflow上,很多开发者会分享他们的经验和解决方案。通过这些讨论,我们可以学到很多实用的知识,帮助我们更好地理解和使用这些工具。

总之,遇到问题时,不要害怕去寻求帮助,很多人都曾经经历过类似的困扰,分享他们的经验可以让我们少走很多弯路。

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()

撰写回答