说我有这样的功能:
public String runCommand(parameters, boolean interactive)
{
Process p = null;
// some code
try
{
final ProcessBuilder pb = new ProcessBuilder(my_command);
pb.inheritIO(); // So the output is displayed on the console
p = pb.start();
p.waitFor();
}
catch( IOException | InterruptedException e )
{
e.printStackTrace();
}
if (interactive )
{
return p.exitValue() + "";
}
else
{
// return the stdout of the process p
}
}
我要做的是,只有当ProcessBuilder
布尔设置为interactive
时,才会返回我正在false
运行的流程的标准输出。但是,我无法想象如何将标准输出重定向到ProcessBuilder
的变量。请注意,我使用了inheritIO()
,所以当我使用像adb shell
这样的函数时,shell会显示在我的控制台中,这就是我想要的行为。所以基本上,就像现在一样,我可以看到控制台中的标准输出,但我不知道如何在函数中返回它,所以我可以将这个值用作未来东西的变量。
答案 0 :(得分:0)
试试这个
Process p = new ProcessBuilder(cmd).start();
Reader rdr = new InputStreamReader(p.getInputStream());
StringBuilder sb = new StringBuilder();
for(int i; (i = rdr.read()) !=-1;) {
sb.append((char)i);
}
String var = sb.toString();
答案 1 :(得分:0)
您可以做的是在执行时获取输出,如下所示:
pb.redirectErrorStream(true);
Process p;
try {
p = pb.start();
BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line;
String output = "";
while((line = in.readLine()) != null) {
log.info(line);
output += line + "\n";
}
return output;
} catch (IOException e) {
// ...
}
return null;