【发布时间】:2015-06-26 13:07:25
【问题描述】:
我知道您可以使用以下命令在 java 中为 linux 运行命令并从您刚刚运行的命令中获取输出。
Process p = Runtime.getRuntime().exec("host -t a " + domain);
p.waitFor();
StringBuffer sb = new StringBuffer();
BufferedReader reader =
new BufferedReader(new InputStreamReader(p.getInputStream()));
String line = "";
while ((line = reader.readLine())!= null) {
sb.append(line + "\n");
}
然而,我想知道,有没有更简单的方法可以从运行的命令中获取输出?
【问题讨论】:
-
我建议您在生成数据时阅读它。如果您的缓冲区已满,您的程序将停止等待您的阅读器,但是您要等到程序完成后才能阅读。
-
ProcessBuilder 有一些更简单的处理 IO 的方法。此外,您编写此代码的方式可能会阻止执行或丢失输出。您应该使用一个线程来读取输出,并且应该在调用 waitfor 之前设置该线程。
-
@PeterLawrey 所以请拨出
Process.waitFor()电话,对吗? -
@jgr208 如果您想要退出代码,请将其移至末尾。顺便说一句,我不会使用 StringBuffer,因为它被 StringBuilder 取代了十年左右,并且不会以这种方式逐行读取输出。
-
@PeterLawrey 是的,这只是我抓取的一些示例代码。但至少很高兴我在将示例代码投入实际使用之前得到了这些建议。
标签: java linux output bufferedreader