2014-04-02 35 views
1
的輸出

說我有這樣的功能:檢索的ProcessBuilder

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

試試這個

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