假设我有一个这样的函数:
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
boolean 值设置为 >假
。但是,我无法弄清楚如何使用 ProcessBuilder 将标准输出重定向到变量。请注意,我使用了 inheritIO()
,因此当我使用 adb shell
这样的函数时,shell 会显示在我的控制台中,这是我想要的行为。所以基本上,就目前而言,我可以看到控制台中的标准输出,但我不知道如何在函数中返回它,因此我可以使用这个值作为将来的变量。
最佳答案
试试这个
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();
关于java - 检索 ProcessBuilder 的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22803977/