我正在尝试从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();
}
我也尝试将输出重定向到文件。都没有奏效。有什么想法??
答案 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 );