繁体   English   中英

从 python 运行 java 服务器并等待它启动

[英]run java server from python and wait until it is up

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

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

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

我想等它起来。

我使用了subprocess.call()但它不会终止,所以它会永远等待。 我怎么能等到有 output:

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

有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)

Note: You need to pipe into files and read them in Python, if you would pipe into the Python script and the script exits the child process gets killed (no matter if the processes are decoupled)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM