如何使用超时终止此子进程?

时间:2013-04-13 19:36:36

标签: javascript python phantomjs

我知道有关终止子进程调用的问题已被问过几次,包括here,但是,试图按照这些答案,如果脚本挂起(我的话,我似乎无法退出)我正在执行一个phantomjs脚本)。例如,如果我尝试在我的幻像代码中加载一个不存在的jquery文件,那么即使我有一个超时,脚本也会挂起。这是我的代码:

def kill_proc():
    if p.poll() != 0:
        process.kill()


p = subprocess.Popen(['phantomjs','file.js'],stdout=subprocess.PIPE)
    out, phantomError = p.communicate()

t = Timer(5, kill_proc) # should kill it after 5 seconds
t.start()
p.wait()

我的phantomjs脚本(正在进行的工作):

var page = require('webpage').create();
page.includeJs("http://localhost/jquery.js",function(){ 
    phantom.exit();
});

1 个答案:

答案 0 :(得分:1)

我认为您的问题可能是p.communicate()将“Wait for process to terminate”,这意味着如果脚本挂起,您的计时器实际上永远不会启动。

在计时器启动后移动你的通话进行通信(并在kill_proc函数中将process.kill()更改为p.kill()),我认为它会做你想要的。

正如我上面提到的那样,Python 3.3的子进程模块函数有一个超时参数,可以自动完成。