运行 java 来自 python 的服务器并等待它启动

run java server from python and wait until it is up

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

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

然后服务器启动需要一些时间,有时需要一分钟,有时需要更多。

我想等到它了

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

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

有两个问题:

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

如果您仍然需要通过 Python 脚本实现它,您可以 运行 java 服务器在一个单独的进程组中,因此它与父进程分离(Python process) - 只适用于 *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 脚本并且脚本退出,子进程将被杀死(无论进程是否解耦)