如何在python中超时运行的jar程序

时间:2014-06-24 01:51:37

标签: java python process

我正在使用以下Command类来超时运行命令。它适用于shell命令,但是当我使用命令java -jar将它传递给Command类来启动java程序时,它似乎没有终止java进程。请帮忙。

class Command(object):

cmd = None
process = None
status = None
output, error = '', ''

def __init__(self, cmd):
    # if isinstance(cmd, basestring):
    #     cmd = shlex.split(cmd)
    self.cmd = cmd
    #self.process = None

def run(self, timeout, outputfile, errfile):
    def target():
        print 'Thread started'
        try:
            print self.cmd
            open(outputfile, 'w').close()
            open(errfile, 'w').close()
            self.process = subprocess.Popen(self.cmd, shell=True, stdout = file(outputfile, 'w+'), stderr = file(errfile, 'w+')) #
            (self.output, self.error) = self.process.communicate() #
            self.status = self.process.returncode
            print self.output #"Out:'%s'" % 
            print self.error #"Err:'%s'" % 
            print 'Thread finished'
        except:
            self.error = traceback.format_exc()
            self.status = -1      
            print self.error  

    thread = threading.Thread(target=target)
    thread.start()

    thread.join(timeout)
    if thread.is_alive():
        print 'Terminating process'
        self.process.kill() #terminate
        thread.join()
    print self.status

1 个答案:

答案 0 :(得分:1)

这是因为shell启动了java的子进程。您可以删除shell=True或将命令设为exec java -jar ...

来自exec的手册页:

  

exec()系列函数用新的过程映像替换当前过程映像。