【问题标题】:Retrieve output of ProcessBuilder检索 ProcessBuilder 的输出
【发布时间】:2014-04-02 07:10:02
【问题描述】:

假设我有这样的功能:

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 会显示在我的控制台中,这是我想要的行为。所以基本上,就目前而言,我可以在控制台中看到标准输出,但我不知道如何在函数中返回它,因此我可以将此值用作未来内容的变量。

【问题讨论】:

    标签: java process stream


    【解决方案1】:

    试试这个

        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();
    

    【讨论】:

      【解决方案2】:

      您可以做的是在执行时获取输出,如下所示:

      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;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-07-19
        • 1970-01-01
        • 1970-01-01
        • 2023-03-24
        • 1970-01-01
        • 1970-01-01
        • 2011-10-19
        相关资源
        最近更新 更多