首页 > 解决方案 > 从python运行java服务器并等待它启动

问题描述

所以我从终端运行java服务器调用它:

java =Xmx12G - jar jar.jar --build ../foo --inMemory

然后服务器需要一些时间来加强,有时一分钟有时更多。

我想等它起来。

我用过subprocess.call(),但它没有终止,所以它永远等待。我怎样才能等到有输出:

16:53:28.315 INFO (GrizzlyServer.java:153) Grizzly server running.

标签: javapythonsubprocessgrizzly

解决方案


有2个问题:

1.) subprocess.call() 等到java服务器退出。
2.)当父(Python)进程停止时,子进程通常会被杀死。

如果您仍然需要通过 Python 脚本进行操作,您可以在单独的进程组中运行 java 服务器,因此它与父进程(Python 进程)分离 - 仅适用于 *nix 操作系统:

import os
import time
import subprocess

p = subprocess.Popen(
    ['nohup', 'java', '=Xmx12G', '-jar', 'jar.jar', '--build', '../foo', '--inMemory']
    stdout=open('/tmp/logOut.log', 'w'),
    stderr=open('/tmp/logErr.log', 'w'),
    preexec_fn=os.setpgrp
)

while True:
    if 'Grizzly server running' in open('/tmp/logOut.log').read():
        break
    time.sleep(1)

注意:您需要管道到文件并在 Python 中读取它们,如果您要管道到 Python 脚本并且脚本退出,则子进程会被杀死(无论进程是否解耦)


推荐阅读