Python:执行一个长脚本而不阻塞主进程

2024-09-30 22:20:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用的是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'+'"' 

Tags: gnu命令size进程linux系统线程global
1条回答
网友
1楼 · 发布于 2024-09-30 22:20:02

你应该走上正轨。就用吧

p = subprocess.Popen(command)

您可以检查进程是否以p.poll结束,如documentation中所述

注意,不建议使用shell=True(出于安全原因),因此除非有很好的理由,否则您应该尽量不要使用它。在

如文档中所述,您的command必须是一个参数列表。如果构建一个长字符串,则应该使用shlex.split(command)将其转换为字符串,同时保留"等等(当然,您的模块中需要一个import shlex)。在

相关问题 更多 >