我有一个python脚本通过子进程调用ffmpeg来做一些mp3操作。它在前台运行良好,但是如果我在后台运行它,它可以达到ffmpeg命令,它本身可以将其配置转储到stderr中。此时,一切都停止,并且父任务被报告为停止,而不会在任何地方引发异常。我已经在ffmpeg的地方尝试了一些其他简单的命令,它们通常在前景或背景中执行。在后台调用ffmpeg杀死脚本
这是问题的小例子:
import subprocess
inf = "3HTOSD.mp3"
outf = "out.mp3"
args = [ "ffmpeg",
"-y",
"-i", inf,
"-ss", "0",
"-t", "20",
outf
]
print "About to do"
result = subprocess.call(args)
print "Done"
我真的不能工作了,为什么还是包装过程中如何使家长没有至少提高一个错误终止,只有如何发生在一个很小的环境中。到底是怎么回事?另外,我知道ffmpeg不是最好的包,但我与使用ffmpeg编译到它的东西接口,所以再次使用它似乎是明智的。
这个。感谢你的解释,整个“等待stdin”的东西是我未知的未知之一。实现最简单的解决方案就是将一个subprocess.PIPE附加到调用的stdin。 – TimD
@TimD:除非您在进程运行时读/写/关闭相应的管道,否则不要使用PIPE,即不要在subprocess.call()函数中使用它,即使它恰好与某些ffmpeg可执行文件的参数。 – jfs