如何在Python中超时运行的jar程序
我正在使用下面的 Command
类来设置一个正在运行的命令的超时时间。这个方法在执行 shell 命令时效果很好,但当我用 java -jar
来启动一个 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 个回答
1
这是因为在运行 Java 时,系统会启动一个子进程。你可以选择去掉 shell=True
这个选项,或者把你的命令改成 exec java -jar ...
。
关于 exec 的说明:
exec() 这一系列的函数会用一个新的进程来替换掉当前的进程。