我有一个在修改文件后保存文件的功能(由ffmpeg修改的视频文件)。该函数使用二进制文件,在其上调用子进程。我遇到的问题是如果我在第一次运行后不久就调用了这个函数(即第一个进程仍在运行),第二个进程将不会执行,或者它将覆盖第一个进程。
我仍然对进程和线程不熟悉,而且我不想让函数创建一堆线程,因为我担心这可能会失控(毫无根据的恐惧?)。 当二进制文件空闲时,如何获取排队其他作业并执行的功能?
代码:
pipe = sp.Popen([ffmpeg_binary,"-i", sample_vid, "-vcodec", "copy", "-acodec", "copy",
"-ss", start_time, "-t", end_time, "-sn", output_file_name ])
output_file_name变量检查它是否存在。如果它不存在,它将设置变量等于输入文件名+ index + .extension。
答案 0 :(得分:2)
您可以在继续下一个进程之前调用subprocess.wait()
。这将阻塞,直到该过程完成,确保所有子进程按顺序运行。请参阅documentation。
答案 1 :(得分:0)
如果您只想调用外部命令而不是使用所有进程/线程低级别api,请使用库sh。
然后你可以这样做:
from sh import ffmpeg
ffmpeg(arg1, arg2) # call 1
ffmpeg(arg2, arg3) # call 2
# if you want custom binary
from sh import Command
ffmpeg = Command('/path/to/ffmpeg')