2013-12-11 109 views
0

基本上,我試圖打開一個終端窗口並命令它啓動一個php腳本。
也可以在腳本輸出新行到終端時立即輸入並獲取輸出。如果可能的話,我打算把它做成hidden打開一個獨立的終端窗口並用Java運行命令

更像端子輸出和輸入鏡像到Java應用程序本身

我做

Runtime.getRuntime().exec("/usr/bin/open -a Terminal ~/Desktop/test.php"); //mac 

我不知道如何輸入,並立即獲得一次輸出的PHP腳本發送輸出到終端。

請幫我做點這裏

+1

一般提示:1)閱讀(並實現)*所有*的建議[當Runtime.exec()不會](http://www.javaworld.com/jw-12-2000/ JW-1229-traps.html)。這可能會解決問題。如果不是,它應該提供更多關於失敗原因的信息。然後忽略它引用'exec'並使用'ProcessBuilder'構建'Process'。還要將'String arg'分解爲'String [] args'來解釋其本身包含空格的參數。 2)提出問題。 –

+0

@AndrewThompson如果腳本要求更多的輸入,我會怎麼做? – junyi00

+0

不確定那個,但看看'Process'提供的I/O流。 –

回答

0

創建進程並讀取進程的輸入流。

(Javadoc中)的getInputStream()

獲得子進程的輸入流。流獲取從此Process對象表示的進程的標準輸出流中傳送的數據。

//-->check command line<-- 
Process process = Runtime.getRuntime().exec("/usr/bin/php /home/amit/hello.php"); 
BufferedInputStream iStream = new BufferedInputStream(process.getInputStream()); 
BufferedOutputStream oStream = new BufferedOutputStream(process.getOutputStream()); 

byte[] buffer = new byte[1024]; 
while (true){ 
    int length = iStream.read(buffer); 
    if(length == -1) 
     break; 
    System.out.println(new String(buffer, 0, length)); 
} 

注:已經寫入Linux。

+0

我試過'System.out.println(stream.read());'但是比腳本運行,沒有打印在原始終端上? – junyi00

+0

您應該使用[ProcessBuilder](http://docs.oracle.com/javase/7/docs/api/java/lang/ProcessBuilder.html),而不是Runtime.exec。請參閱Andrew Thomson的評論以查看鏈接爲什麼不應該使用Runtime.exec。 – linski

0

而不是在終端執行php腳本,它反過來使用php來執行腳本,只需在php中執行php腳本並捕獲輸入/輸出。

$ which php 
/usr/bin/php 
相關問題