java - 检索 ProcessBuilder 的输出

标签 java process stream

假设我有一个这样的函数:

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/

相关文章:

java - 从用户输入java覆盖变量

java - java中识别字符串数组中的元素

java - NativeActivity 不显示在屏幕上

java - 如何比较初始数组列表和多个数组列表中的对象直到返回 true?

python - 在 KeyboardInterrupt 之后杀死 subprocess.call

c - stderr 和 stdout - 未缓冲与缓冲?

c# - 进程包装,一些输出不显示

windows - Delphi:如何向其他应用程序发送命令?

Java 8 Streams API HAVING 子句等同于 GroupingBy?

php - 检测stream_socket是否有效