linux命令的输出未在java中捕获

时间:2015-09-18 11:22:55

标签: java linux git process

我正在尝试从java运行以下命令并想要捕获输出。该方法立即完成,无需向控制台写任何内容。

Linux命令是repo forall -c 'echo pwd is;pwd;git status' 方法是

public static String executeCommandWithOutput(String command) {
    System.out.println("Running the command "+command);
    StringBuffer output = new StringBuffer();
    String line = "";
    try {
        Process process =Runtime.getRuntime().exec(command);
        process.waitFor();

        BufferedReader reader = 
            new BufferedReader(new InputStreamReader(process.getInputStream()));
        while ((line = reader.readLine())!= null) {
            output.append(line);
        }
        System.out.println("Content is "+output.toString());
    } catch (IOException e) {
        e.printStackTrace();
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    return output.toString();
}

我也尝试将输出重定向到文件。都没有奏效。有什么想法??

1 个答案:

答案 0 :(得分:1)

检查您尝试执行的命令是否具有标准输出。

可能是它失败了,你得到错误输出。

您可以使用getErrorStream检查错误输出,文档为here

E.g。像这样

StringBuffer error = new StringBuffer();

BufferedReader reader = 
    new BufferedReader(new InputStreamReader(process.getErrorStream()));

while ((line = reader.readLine())!= null) {
        error.append(line);
}

System.out.println("Error is " + error.toString());

同时检查forked命令的exitValue,doc是here

int exitStatus = process.exitValue();

System.out.println("Exit status is " + exitStatus );