Linux机器上的Java进程输入流
我正在使用Java进程,如下所示:Linux机器上的Java进程输入流,java,linux,inputstream,Java,Linux,Inputstream,我正在使用Java进程,如下所示: Runtime rt = Runtime.getRuntime(); try { Process pr = rt.exec(cmd); response = IOUtils.toString(pr.getInputStream(), "UTF-8"); response = response.substring(2, response.length()-4); logger.debug(
Runtime rt = Runtime.getRuntime();
try {
Process pr = rt.exec(cmd);
response = IOUtils.toString(pr.getInputStream(), "UTF-8");
response = response.substring(2, response.length()-4);
logger.debug("response :" + response);
} catch (IOException e) {
logger.error(e);
e.printStackTrace();
}
我可以在我的本地机器(MacOSX)中看到记录器。但是当我在Redhat Linux机器上运行相同的程序时,我在查看日志时遇到了问题。我不知道在pr.getInputStream()之后发生了什么。在该语句之前有一个日志记录程序可以正常工作。我想看到执行器(cmd)的响应。我怎样才能做到这一点。当我试图读取InputStream时,我怀疑出了什么问题。尝试在两个线程中读取输入流和错误流,而不是启动进程的线程。
我曾看到,如果没有人读取进程正在写入的内容,进程将无法写入错误或输出流。我建议您阅读getErrorStream(),我打赌您的命令会报告错误。@PeterLawrey有没有办法检查我的exec命令是否返回错误/成功。这样我就可以相应地阅读我的回答了。@SatishJonnala在哪种意义上?如果
exec
本身失败,Runtime
的文档似乎很有用,如果您运行的命令失败,Process
的文档可能会有所帮助。@DennisMeng My exec命令成功。我可以看到它执行的结果。shell应该在执行之后给出一些响应。唯一的问题是,我的程序在尝试读取进程InputStream时停止。我怀疑exec是否在等待我提供更多输入,或者我是否需要关闭任何打开的流/通道。我对Java中的CLI完全陌生。