我使用的是GNU/Linux和Python2.7.3,我是新手。我试图使用Popen()
命令执行一个长时间安装的系统进程,比如ffmpeg
,以避免阻塞主python进程。我做不到。在
我的第一次尝试是使用线程,但是有点复杂,因为图形界面不能正常工作(我想应该有更好的方法)
然后我试着用叉子,但这就像用坦克杀死苍蝇。在
现在我正在尝试使用Popen
,我在互联网上看到很多关于它的使用的参考,但是我认为我没有正确地运行它。也许我误解了这些例子。在
我试过:
##command is ffmpeg like that works ok
p = subprocess.Popen(command, shell=True)
我也试过:
^{pr2}$通常我遇到一个错误或一个连续的行为,命令结束,然后主程序继续。我错过了什么?在
指挥部分:
global vidSource
global srtSource
global done
size = "3"
font = "/usr/share/fonts/truetype/freefont/FreeSerif.ttf"
command = 'mencoder ' + '"' + vidSource + '"' + " -oac copy -ovc lavc -lavdopts threads=2 -sub " + "'" + srtSource + "'" + " -subcp -utf8 -font "+ '"'+ font+ '"' + " -subfont-text-scale " + size + " -o " + '"' + vidSource + '2'+'"'
你应该走上正轨。就用吧
您可以检查进程是否以
p.poll
结束,如documentation中所述注意,不建议使用
shell=True
(出于安全原因),因此除非有很好的理由,否则您应该尽量不要使用它。在如文档中所述,您的
command
必须是一个参数列表。如果构建一个长字符串,则应该使用shlex.split(command)
将其转换为字符串,同时保留"
等等(当然,您的模块中需要一个import shlex
)。在相关问题 更多 >
编程相关推荐