我正在为流行的游戏Minecraft编写服务器管理工具。
这个游戏及其服务器应用程序是用java编写的。服务器只是一个从终端启动的jar,它接受来自stdin的输入作为命令并输出到stdout。 (java -jar server.jar中的某些内容)
现在我要做的是围绕这些java进程创建一些包装器(python中的atm,我可以使用java)以及创建用于管理它们的API(发送命令,重启,检查是否该过程仍在运行,...)。我需要这个API,所以我可以为整个事情创建一个Web前端。一个物理服务器将运行这些java进程的多个实例(多个游戏服务器),所以我不希望在这里有太多的开销。
我尝试过使用python的子进程,但这会阻塞直到程序完成然后输出stdout内容,但我需要它才能返回实时。我也遇到过Pexpect(http://pexpect.readthedocs.org/en/latest/),但这似乎更像是一个自动化的测试工具包。
答案 0 :(得分:0)
使用
Runtime.getRuntime().exec("your sever start command or script")
获取Process的实例。
使用实例,您可以使用
接收服务器的标准输出InputStreamReader(process.getInputStream()),
并使用
将字节发送到它的标准输入process.getOutputStream().write("your commannd\n".getBytes());
请记住刷新ostream以执行命令!