包装java程序的stdin / stdout

时间:2014-07-30 17:08:06

标签: java python minecraft

我正在为流行的游戏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/),但这似乎更像是一个自动化的测试工具包。

1 个答案:

答案 0 :(得分:0)

使用

Runtime.getRuntime().exec("your sever start command or script")

获取Process的实例。

使用实例,您可以使用

接收服务器的标准输出
InputStreamReader(process.getInputStream()), 

并使用

将字节发送到它的标准输入
process.getOutputStream().write("your commannd\n".getBytes()); 

请记住刷新ostream以执行命令!