2012-08-30 21 views
0

所以我導入了一個jruby解釋器作爲庫來運行一個外部的ruby應用程序。不過,我需要以某種方式與Ruby應用程序進行交互。現在我有紅寶石應用程序輸出標準輸出信息和請求用戶選項在標準輸入。Java寫給Stdin

所以,如果我希望java能夠處理插入選項而不是用戶,我需要一種方法,我可以從java以某種方式寫入stdin以選擇選項。有誰知道我該怎麼做?甚至更好的方法來做到這一點?

我打電話的JRuby像這樣:

String[] newargs = new String[2]; 
newargs[0] = "-S"; 
newargs[1] = "path_to_some_rubyfile.rb" 
org.jruby.Main jruby = new org.jruby.Main(); 
ruby.main(newargs); 

紅寶石應用程序輸出這樣的東西:

How do you feel today? 
(1) Happy 
(2) Sad 

,然後等待用戶輸入輸入1或2 但我希望Java能夠輸入這些選項,而不是讓用戶這樣做。

回答

0

我對JRuby不太熟悉,老實說我會認爲它會自動包裝System.in。檢查看看這樣的選項是否存在。否則,我個人的選擇是簡單地啓動一個新的進程(「ruby」)並使用它提供的流。

問候 md_5

0

JRuby中確實有辦法通過指定InputStream和兩個輸出流,但是我發現了什麼更好的工作去構造它是創建寫入一個PipedInputStream的一個的PipedOutputStream並設置系統輸入到PipedInputStream像這樣:

PipedOutputStream inwriter = new PipedOutputStream(); 
PipedInputStream input = new PipedInputStream(inwriter); 
System.setIn(input); 
inwriter.write("1\n".getBytes());