我试图写一些最终应该看起来像NetHack机器人的东西。但是我遇到了一些我到目前为止无法解决的问题。
第一个原因是,由于某些奇怪的原因,NetHack以及可能的其他tty接口程序在从ProcessBuilder
运行时不会运行。我已经确认它确实适用于其他程序(例如Notepad ++)。
我认为这是因为NetHack实际上更喜欢从终端运行然后使用它直到它完成,但Java不是终端,所以它吓坏了并且死了。
所以我决定尝试构建一个shell而不是从那个运行NetHack。然而,这引入了一些其他问题。
第一个是当我读取输入流(stdout
)而不是返回-1
或者根本没有任何东西要读取时,InputStreamReader.read()
只是阻塞。这不会发生在终端中的可预测位置,因为只有当终端中的文本末尾到达时才会发生。
第二个是当我尝试写一些内容到stdin
时(不要忘记flush()
,没有任何反应。)(通过尝试write("echo 1")
和read()
进行测试结果)
我认为第一个问题没有解决方案(不涉及编辑NetHack的源代码),我不知道如何处理其他两个问题。
(注意:我正在积极尝试避免依赖脚本或预先存在的框架)
非常感谢任何帮助。
编辑:最后一个问题是通过附加System.lineSeperator()
(这是预期的)来解决的。此外,Java似乎吸收终端屏幕,为什么它会这样做,有没有办法撤消它,这将使调试更容易。