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

2024-10-01 07:47:06 发布

您现在位置:Python中文网/ 问答频道 /正文

因此,我从终端运行java server,并使用以下命令调用它:

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

然后服务器需要一段时间才能启动,有时需要一分钟,有时需要更长的时间

我想等到它结束

我使用了subprocess.call(),但是它没有终止,所以它会永远等待。 如何等待直到有输出:

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


Tags: 命令buildinfo服务器终端serverfoo时间
1条回答
网友
1楼 · 发布于 2024-10-01 07:47:06

有两个问题:

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中读取它们,子进程将被终止(无论进程是否解耦)

相关问题 更多 >