2014-06-30 52 views
0

我正在編寫一個javacode來調用交互式shellScript並使用進程生成器來調用shellscript。我知道要傳遞參數給這個shell腳本,我必須通過輸入流來檢查它的輸出,並且需要使用輸出流來傳遞命令。我的問題是,我怎麼會知道使用輸入流它提示輸入值?使用java運行交互式shellScript

我的代碼:

ProcessBuilder pb2=new ProcessBuilder("/home/abhijeet/sample1.sh","--ip="+formobj.getUpFile().getFileName(),"--seqs="+seqs); 

     script_exec = pb2.start(); 

       OutputStream in = script_exec.getOutputStream(); 

       InputStreamReader rd=new InputStreamReader(script_exec.getInputStream()); 

       pb2.redirectError(); 

       BufferedReader reader1 =new BufferedReader(new InputStreamReader(script_exec.getInputStream())); 

       StringBuffer out=new StringBuffer(); 

       String output_line = "";  

        while ((output_line = reader1.readLine())!= null) 
        { 
          out=out.append(output_line+"/n"); 
          System.out.println("val of output_line"+output_line); 

          //---> i need code here to check that whether script is prompting for taking input ,so i can pass it values using output stream 

        } 

有沒有什麼辦法可以直接知道腳本正在等待來自用戶的輸入?

回答

0

讀取進程輸出流並檢查輸入提示符,如果知道輸入提示符,則將這些值放入inupt流中。 否則你無法檢查。

ProcessBuilder pb = new ProcessBuilder(command); 
pb.redirectErrorStream(true); 
BufferedReader b1 = new BufferedReader(new InputStreamReader(p.getInputStream())); 
BufferedWriter w1 = new BufferedWriter(new OutputStreamWriter(p.getOutputStream())); 
String line = ""; 
String outp = ""; 
while ((line = b1.readLine()) != null) { 
    if (line.equals("PLEASE INPUT THE VALUE:")) { 
    // output to stream 
    w1.write("42"); 
    } 
    outp += line + "\n"; 
} 

... 

UPD:爲你的代碼應該是類似的東西

ProcessBuilder pb2=new ProcessBuilder("/home/ahijeet/sample1.sh","--ip="+formobj.getUpFile().getFileName(),"--seqs="+seqs); 

    script_exec = pb2.start(); 

      OutputStream in = script_exec.getOutputStream(); 

      InputStreamReader rd=new InputStreamReader(script_exec.getInputStream()); 

      pb2.redirectError(); 

      BufferedReader reader1 =new BufferedReader(new InputStreamReader(script_exec.getInputStream())); 

      StringBuffer out=new StringBuffer(); 

      String output_line = "";  

       while ((output_line = reader1.readLine())!= null) 
       { 
         out=out.append(output_line+"/n"); 
         System.out.println("val of output_line"+output_line); 

         //---> i need code here to check that whether script is prompting for taking input ,so i can pass it values using output stream 
         if (output_line.equals("PLEASE INPUT THE VALUE:")) { 
          // output to stream 
          in.write("42"); 
         } 

       } 
+0

我的問題是一樣的,我不知道怎麼會檢查輸入提示?然後我可以使用outputstream設置值。 –

+0

您可以逐行讀取進程輸出流,是嗎?當你閱讀下一行時,你必須檢查這一行的關鍵輸入序列 – Sharkman

+0

看看我已附加到答案的代碼 – Sharkman