2016-03-01 112 views
1

我有一個Rails應用程序,並試圖通過CLI與Jav​​a程序進行通信。使用Ruby的命令行交互

當我運行使用system Java代碼:「什麼是你的年齡」

system "java askQuestion" 

它會提示用戶輸入並等待一個答案,如

我想從一個變量中傳入一個值並捕獲輸出。

如何與CLI進行交互並運行命令?

我做了研究,但找不到任何東西,或者我錯過了正確的術語來搜索。

解決方案:IO.popen

更新 - > 我發現這裏正是我想要的和份額也許幫助別人也是如此,http://ruby.bastardsbook.com/chapters/external-programs/

+0

我們需要更多信息。 Java代碼在處理之前需要多少輸入?你可以從STDIN管道輸入嗎?它可以從文件中讀取響應嗎?你說你做了研究,但你不告訴我們你在哪裏搜索,爲什麼這些沒有幫助,這不利於我們;告訴我們你在哪裏搜索,爲什麼那些沒有好處,所以我們不會重複你的腳步。我強烈建議您閱讀「[問]」,其中包括頁面底部的所有鏈接,因爲您的問題太寬泛,缺乏細節。 –

+0

你有沒有試過在'rails console'中試試?這聽起來像你所描述的。 http://edgeguides.rubyonrails.org/command_line.html#rails-console(順便說一句 - 當你對一種語言如此陌生以至於你甚至不知道要搜索的術語時,這會非常困難,很容易忘記那:)) – Jaime

+0

謝謝,我會檢查「如何問」。我設法使用「IO.popen」完成我想要做的事情。我在我的文章中添加了解決方案 –

回答

0

Kernel#system在子shell只是執行命令,返回過程開始的結果(true/false)。

要捕獲輸出,請使用backticks (or %x||)

要與外殼進行交互,一個可能使用IO#popen,但在你的情況,我只想堅持執行

output = `echo 37 | java askQuestion` 

以上會的echo(37在這種特定情況下)輸出傳遞到Java處理。 Java進程的響應將存儲在變量output中。

+0

我試過這個輸出='java askQuestion | 「37」,但它給出了這個錯誤「sh:1:'37'not found」。 –

+5

爲什麼在地球上你會嘗試將java的輸出輸出爲'37',而不是其他方式?! – mudasobwa