收集Linux命令输出

use*_*592 12 java linux process

我现在在linux机器上.我有这将运行一些Linux命令,例如Java程序ps,top,listfree -m.

在Java中运行命令的方法如下:

Process p = Runtime.getRuntime().exec("free -m");
Run Code Online (Sandbox Code Playgroud)

我如何通过Java程序收集输出?我需要处理输出中的数据.

Joa*_*uer 14

使用Process.getInputStream()得到一个InputStream代表新创建的进程的标准输出.

请注意,从Java启动/运行外部进程可能非常棘手并且存在很多陷阱.

这篇优秀的文章中描述了它们,它也描述了它们的方法.

  • @user:在这种情况下,你可能遇到了`top`的限制:它想要一个真正的终端作为它的输出,而不仅仅是一个流.您可以尝试添加`-b`选项以批处理模式运行它. (2认同)
  • 它适用于"top -b -n 1".太棒了.十分感谢. (2认同)

Nic*_*zio 6

要收集输出,你可以做类似的事情

 Process p = Runtime.getRuntime().exec("my terminal command");

  p.waitFor();
  BufferedReader buf = new BufferedReader(new InputStreamReader(
          p.getInputStream()));
  String line = "";
  String output = "";

  while ((line = buf.readLine()) != null) {
    output += line + "\n";
  }

  System.out.println(output);
Run Code Online (Sandbox Code Playgroud)

这将运行您的脚本,然后将脚本的输出收集到变量中.Joachim Sauer的答案中的链接还有其他例子.

  • 小心!你陷入其中一个坑(实际上是几个):当命令的输出大于操作系统的stdout上的缓冲区时(那缓冲区通常只有几Kb),那么你的`waitFor()`电话会无限期地阻止. (4认同)