所以我从使用以下命令的终端运行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进程)是分离的-只能在* 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读取它们。