在Java中与shell交互

时间:2016-11-07 17:55:39

标签: java shell process command-prompt stdin

我试图写一些最终应该看起来像NetHack机器人的东西。但是我遇到了一些我到目前为止无法解决的问题。

第一个原因是,由于某些奇怪的原因,NetHack以及可能的其他tty接口程序在从ProcessBuilder运行时不会运行。我已经确认它确实适用于其他程序(例如Notepad ++)。 我认为这是因为NetHack实际上更喜欢从终端运行然后使用它直到它完成,但Java不是终端,所以它吓坏了并且死了。

所以我决定尝试构建一个shell而不是从那个运行NetHack。然而,这引入了一些其他问题。

第一个是当我读取输入流(stdout)而不是返回-1或者根本没有任何东西要读取时,InputStreamReader.read()只是阻塞。这不会发生在终端中的可预测位置,因为只有当终端中的文本末尾到达时才会发生。

第二个是当我尝试写一些内容到stdin时(不要忘记flush(),没有任何反应。)(通过尝试write("echo 1")read()进行测试结果)

我认为第一个问题没有解决方案(不涉及编辑NetHack的源代码),我不知道如何处理其他两个问题。

(注意:我正在积极尝试避免依赖脚本或预先存在的框架)

非常感谢任何帮助。

编辑:最后一个问题是通过附加System.lineSeperator()(这是预期的)来解决的。此外,Java似乎吸收终端屏幕,为什么它会这样做,有没有办法撤消它,这将使调试更容易。

0 个答案:

没有答案