Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中与shell交互_Java_Shell_Process_Command Prompt_Stdin - Fatal编程技术网

在Java中与shell交互

在Java中与shell交互,java,shell,process,command-prompt,stdin,Java,Shell,Process,Command Prompt,Stdin,我试图写一些东西,最终看起来像NetHack的机器人。然而,我遇到了一些问题,到目前为止我还不能自己解决 第一个原因是,出于某种奇怪的原因,NetHack和其他可能的tty接口程序在从ProcessBuilder运行时无法运行。我已经确认它确实适用于其他程序(例如记事本++)。 我认为这是因为NetHack实际上更喜欢从终端运行,然后使用终端直到完成,但Java不是终端,所以它会崩溃并死亡 因此,我决定尝试构建一个shell,并从运行NetHack开始。然而,这带来了一些其他问题 第一个是,当我

我试图写一些东西,最终看起来像NetHack的机器人。然而,我遇到了一些问题,到目前为止我还不能自己解决

第一个原因是,出于某种奇怪的原因,NetHack和其他可能的tty接口程序在从
ProcessBuilder
运行时无法运行。我已经确认它确实适用于其他程序(例如记事本++)。 我认为这是因为NetHack实际上更喜欢从终端运行,然后使用终端直到完成,但Java不是终端,所以它会崩溃并死亡

因此,我决定尝试构建一个shell,并从运行NetHack开始。然而,这带来了一些其他问题

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

第二个问题是,当我尝试向stdin写入内容时(不要忘记刷新()),什么也不会发生。(通过尝试写入(“echo 1”)和读取()测试结果)

我认为第一个问题没有解决办法(不涉及编辑NetHack的源代码),我也不知道如何处理另外两个问题

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

任何帮助都将不胜感激

编辑:上一个问题是通过添加
System.lineseparator()
(这是意料之中的)解决的。而且,Java似乎吸收了终端屏幕,为什么它会这样做?有没有办法撤销它,这将使调试变得更容易