2012-02-21 212 views
2

如何使用Runtime.getRunTime.exec()發送和接收多個輸入。使用java的交互式命令Runtime.getRunTime.exec()

例如,如果我想運行諸如openSSL之類的東西來生成csr,它會詢問諸如狀態,城市,常用名等內容。

Process p = Runtime.getRuntime().exec(cmd); 
OutputStream out = p.getOutputStream(); 
//print stuff p.getInputStream(); 
//Now i want to send some inputs 
out.write("test".getBytes()); 
//flush and close??? don't know what to do here 
//print what ever is returned 
//Now i want to send some more inputs 
out.write("test2".getBytes()); 
//print what ever is returned.. and so on until this is complete 

爲什麼不使用p.getInputStream()來讀取你所需要的使用out.write而 發送()相應地發送數據。

Process p = Runtime.getRuntime().exec(cmd); 
OutputStream out = p.getOutputStream(); 
//print stuff p.getInputStream(); 
out.write("test".getBytes()); 
out.close(); //if i don't close, it will just sit there 
//print stuff p.getInputStream(); 
out.write("test".getBytes()); // I can no longer write at this point, maybe because the outputstream was closed? 

回答

1

爲什麼不使用p.getInputStream().read()看你需要什麼,而使用out.write()相應地發送數據要發送。

這裏是取自一個例子:http://www.rgagnon.com/javadetails/java-0014.html

String line; 
OutputStream stdin = null; 
InputStream stderr = null; 
InputStream stdout = null; 

    // launch EXE and grab stdin/stdout and stderr 
    Process process = Runtime.getRuntime().exec ("/folder/exec.exe"); 
    stdin = process.getOutputStream(); 
    stderr = process.getErrorStream(); 
    stdout = process.getInputStream(); 

    // "write" the parms into stdin 
    line = "param1" + "\n"; 
    stdin.write(line.getBytes()); 
    stdin.flush(); 

    line = "param2" + "\n"; 
    stdin.write(line.getBytes()); 
    stdin.flush(); 

    line = "param3" + "\n"; 
    stdin.write(line.getBytes()); 
    stdin.flush(); 

    stdin.close(); 

    // clean up if any output in stdout 
    BufferedReader brCleanUp = 
    new BufferedReader (new InputStreamReader (stdout)); 
    while ((line = brCleanUp.readLine()) != null) { 
    //System.out.println ("[Stdout] " + line); 
    } 
    brCleanUp.close(); 

    // clean up if any output in stderr 
    brCleanUp = 
    new BufferedReader (new InputStreamReader (stderr)); 
    while ((line = brCleanUp.readLine()) != null) { 
    //System.out.println ("[Stderr] " + line); 
    } 
    brCleanUp.close(); 
+0

這就是我試圖做的,但它似乎是寫工作不正常。我會用更多的解釋來更新這個問題。 – boyco 2012-02-21 23:44:36

+1

不要忘記沖洗:) – james 2012-02-21 23:49:12

+1

這工作,我嘗試使用沖洗前,但我想這麼多不同的東西,我必須搞砸了別的東西,導致它不工作。謝謝! – boyco 2012-02-21 23:57:54