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

时间:2018-03-12 02:42:47

标签: python-3.x ffmpeg subprocess

我已经创建了一个简单的方法,可以像在终端

中那样执行命令
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

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

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

问题是输出视频,因为它没有完成整个过程。我正在搜索如何等待Is there a way to check if a subprocess is still running? 但无法将其与我的代码合并。你能分享一下你的经验吗?

由于

2 个答案:

答案 0 :(得分:1)

根据python documentation subprocess.run等待结束的过程。

问题是ffmpeg overwrites the input file如果输入和输出文件相同,因此输出视频变得无法使用。

答案 1 :(得分:1)

对我来说subprocess.run()并没有等待第一条命令完成。它也在执行第二个命令!

因此,它找不到文件,它是第一个命令的结果(也是第二个命令的输入)。

    subprocess.run("sh /MGMUST1/SHARED/RESOURCES/CODE/TRANSCRIPTOME/ONCOPEPT/ONCOPEPT_INDIA/Paired_end.QC.sh" + "; cp " + os.path.join("/MGMUST1/SHARED/RESOURCES/CODE/DEMUX-Scripts/QC-RESULTS/", str(pid) +"/"+ str(eid)+"/"+ str(pid)+"_"+str(eid)+".pdf") + " .")