我已经创建了一个简单的方法,可以像在终端
中那样执行命令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? 但无法将其与我的代码合并。你能分享一下你的经验吗?
由于
答案 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") + " .")