收集Linux命令输出

时间:2011-06-22 14:10:57

标签: java linux process

我现在在linux机器上。我有一个Java程序可以运行一些linux命令,例如pstoplistfree -m

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

Process p = Runtime.getRuntime().exec("free -m");

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

5 个答案:

答案 0 :(得分:14)

使用Process.getInputStream()获取代表新创建过程的标准输出的InputStream

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

this excellent article中描述了它们,它们也描述了它们的方法。

答案 1 :(得分: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);

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

答案 2 :(得分:0)

至于某些命令需要等待一段时间,添加p.waitFor();如果有必要的话。

public static void main(String[] args) {

        CommandLineHelper obj = new CommandLineHelper();
        String domainName = "google.com";
        //in mac oxs
        String command = "ping -c 3 " + domainName;
        String output = obj.executeCommand(command);
        System.out.println(output);

    }

private String executeCommand(String command) {

        StringBuffer output = new StringBuffer();

        Process p;
        try {

            p = Runtime.getRuntime().exec(command);

            p.waitFor();
            BufferedReader reader = 
                            new BufferedReader(new InputStreamReader(p.getInputStream()));

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

        } catch (Exception e) {
            e.printStackTrace();
        }

        return output.toString();

    }

答案 3 :(得分:0)

调用外部流程的技术性非常复杂。 jproc库通过自动使用命令的输出并将结果作为字符串提供来帮助抽象。上面的例子将这样写:

String result = ProcBuilder.run("free", "-m");

它还允许设置超时,以便您的应用程序不会被未终止的外部命令阻止。

答案 4 :(得分:0)

public String RunLinuxGrepCommand(String command) {
    String line = null;
    String strstatus = "";
    try {

        String[] cmd = { "/bin/sh", "-c", command };
        Process p = Runtime.getRuntime().exec(cmd);
        BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream()));
        while ((line = in.readLine()) != null) {
            strstatus = line;
        }
        in.close();
    } catch (Exception e) {

        StringWriter sw = new StringWriter();
        PrintWriter pw = new PrintWriter(sw);
        e.printStackTrace(pw);
        pw.flush();
        String stackTrace = sw.toString();
        int lenoferrorstr = stackTrace.length();
        if (lenoferrorstr > 500) {
            strstatus = "Error:" + stackTrace.substring(0, 500);
        } else {
            strstatus = "Error:" + stackTrace.substring(0, lenoferrorstr - 1);

        }
    }
    return strstatus;

}

这个函数将给出任何linux命令的结果