从python运行Java服务器,直到启动为止

问题描述 投票:0回答:1

所以我从使用以下命令的终端运行Java服务器:

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

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

我想等到它结束。

我使用了subprocess.call(),但是它不会终止,因此它将永远等待。我怎样才能等到有输出:

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

java python subprocess grizzly
1个回答
1
投票

有两个问题:

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读取它们。

© www.soinside.com 2019 - 2024. All rights reserved.