2011-01-19 25 views
2

我已經成功地讓ProcessBuilder運行外部腳本,但是我仍然需要讓Java與外部腳本進行通信。我想我應該從流程中獲取輸入/輸出流,並使用它們來發送和接收數據。給腳本提供輸入時我遇到了最大的麻煩。看起來,我可以通過使用腳本的打印功能從腳本獲得輸出,但似乎無法讓腳本註冊來自主java程序的輸入。讓Java與Python,C,C++和Ruby交談

這個問題涉及四種語言,所以如果您只發布關於一種語言的答案,那很好。

回答

2

方法的getOutputStream()中的任意2之間的通信Process類返回一個可以寫入到Java中的流,該流連接到流程的stdin流。你應該能夠閱讀這個,因爲你通常會閱讀每種語言的標準輸入(例如,cin爲C++,scanf爲C,STDIN.read爲Ruby,不知道Python!)

如果這是你的「重新做,它不工作(你的問題聽起來像它可能是,但很難說)你可以發佈一些代碼,以便更容易地看到你可能做錯了什麼嗎?

+0

感謝您使用C++,C和Ruby的命令!我讓Python通過raw_input工作 – Curlystraw 2011-01-19 17:36:53

0

至於讓Java與Python交談,你有沒有考慮過Jython

關於C和C++,標準的想法是使用Java Native Interface。一旦您可以與C/C++交談,就可以使用C/C++與其他任何語言交流,包括Python和Ruby。

1

您應該使用標準的進程間機制,如管道或套接字。

所有這些語言都具有可用於這兩個庫,而這個策略讓你的進程(Java /紅寶石,紅寶石/ Python和Java的/ C等)