2016-03-01 110 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