java - 从python运行java服务器并等待它启动
问题描述
所以我从终端运行java服务器调用它:
java =Xmx12G - jar jar.jar --build ../foo --inMemory
然后服务器需要一些时间来加强,有时一分钟有时更多。
我想等它起来。
我用过subprocess.call()
,但它没有终止,所以它永远等待。我怎样才能等到有输出:
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)
注意:您需要管道到文件并在 Python 中读取它们,如果您要管道到 Python 脚本并且脚本退出,则子进程会被杀死(无论进程是否解耦)
推荐阅读
- performance-testing - 在负载测试进行时,有没有办法以编程方式检查正在运行的 VUser 计数?
- asynchronous - Flutter 无法从剪贴板读取
- java - WebDriverException:无法创建新会话,因为未找到需要 HttpClient、InputStream 和 long 的“createSession”
- python - 如果 Python 源代码在解释/JITing 之前编译为字节码,为什么在运行之前没有捕获到这个错误?
- rpa - Uipath:将机器人连接到 Orchestrator 问题
- ruby-on-rails - How to use `after_update' callback in rails?
- ionic-framework - 错误:Node Sass 尚不支持您当前的环境:Windows 64-bit with Unsupported runtime (67)
- powershell - 写入主机的数组成员名称
- c# - 没有其他功能与控制台应用程序中运行的计时器一起使用
- python - Python中的未知对象和布尔运算