等待 subprocess.run 直到完成其任务

jam*_*pez 8 subprocess ffmpeg python-3.x

我创建了一个简单的方法,可以像在终端中一样执行命令

from subprocess import PIPE, run

class Command_Line():

    @staticmethod
    def execute(command):
        result = run(command, stdout=PIPE, stderr=PIPE, universal_newlines=True, shell=True)
        print(result)
        return result.stdout
Run Code Online (Sandbox Code Playgroud)

我对上面代码的问题是它不会等到任务/进程完成。假设我使用 ffmpeg 通过以下代码更改视频的帧速率

import Command_Line as cmd    
cmd.execute('ffmpeg -i "000000004.avi" -c copy -y -r 30 "000000004.avi"')
Run Code Online (Sandbox Code Playgroud)

问题是输出视频,因为它没有完成这个过程。我已经搜索了如何等待有没有办法检查子进程是否仍在运行? 但无法将其与我的代码合并。你能分享一下你的经验吗?

谢谢

小智 8

subprocess.run()是同步的,这意味着系统将等到它完成后再继续执行下一个命令。subprocess.Popen()做同样的事情,但它是异步的(系统不会等待它完成)。您可以尝试使用importlib.reload命令重新加载文件。然后它可能会找到您生成的文件。


Mar*_*ius 7

根据python 文档 subprocess.run等待进程结束。

问题是如果输入和输出文件相同,则ffmpeg覆盖输入文件,因此输出视频变得不可用。