запустите java сервер из python и дождитесь его загрузки - PullRequest
1 голос
/ 28 мая 2020

Итак, я запускаю сервер java с терминала, вызывая его с помощью:

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

, затем серверу требуется некоторое время, чтобы активировать его, иногда на минуту больше.

Я хочу подождать, пока он не загрузится.

Я использовал subprocess.call(), но тогда он не завершается, поэтому он ждет вечно. Как мне дождаться вывода:

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

1 Ответ

1 голос
/ 29 мая 2020

Есть 2 проблемы:

1.) Subprocess.call () ждет, пока java сервер не завершится.
2.) Когда родительский (Python) процесс останавливается, обычно дочерний процесс будет убит.

Если вам все еще нужно сделать это с помощью сценария Python, вы можете запустить сервер java в отдельной группе процессов, чтобы он был отделен от родительского (Python процесс) - это работает только в * nix OS:

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, и скрипт выйдет из дочернего процесс убит (независимо от того, развязаны ли процессы)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...