Ruby 如何编写一个程序来包装另一个程序的STDOUT和STDIN?

Ruby 如何编写一个程序来包装另一个程序的STDOUT和STDIN?,ruby,unix,stdout,stdin,pipeline,Ruby,Unix,Stdout,Stdin,Pipeline,我想用Ruby编写一个简单的自动化工具,用来包装一个命令行程序 命令行程序的工作方式有点像REPL:可以通过STDIN输入命令,并将输出返回到STDOUT。因此,Ruby工具需要能够从程序的STDOUT读取输入,以及向程序STDIN返回新命令 如何设置这种循环输入/输出? 我不完全确定这个问题是否与Ruby有关,或者它是否与Unix系统中流的连接方式有关。这很容易用Ruby实现 输出: wrodevlopot:tmp lopot$ ruby test.rb lopot Sat Oct 1 2

我想用Ruby编写一个简单的自动化工具,用来包装一个命令行程序

命令行程序的工作方式有点像REPL:可以通过STDIN输入命令,并将输出返回到STDOUT。因此,Ruby工具需要能够从程序的STDOUT读取输入,以及向程序STDIN返回新命令

如何设置这种循环输入/输出?
我不完全确定这个问题是否与Ruby有关,或者它是否与Unix系统中流的连接方式有关。

这很容易用Ruby实现

输出:

wrodevlopot:tmp lopot$ ruby test.rb 
lopot
Sat Oct  1 21:57:42 CEST 2016

IO.popen返回一个IO处理程序,请注意,我们正在用
w+
打开子进程,这意味着读和写。在上面的示例中,我们打开一个bash进程,发送命令
whoami
,然后我们从中读取并打印,这与我们调用close的子进程完成后的命令
date
相同。

请阅读“”。您要求我们解释如何做一些您应该研究的事情,然后尝试编写代码,然后问一个特定的问题。“相反,你要求我们提供指导。Ruby有多种方法来做你想做的事情。课程的文档将有助于解释,互联网上的各种页面也将有助于解释。@theTinMan非常感谢您的评论。到目前为止,我还没有找到任何关于如何将一个程序双向连接到另一个程序的方法。我也不知道用什么术语来恰当地描述这种情况。这就是我问这个问题的原因。当然,“需要多少研究”是非常主观的,所以我完全理解你投反对票的理由。无论如何,您到Open3模块的链接已经非常有用了。谢谢你。不要误会,这个问题太模糊了。对于REPL工具,您可能希望了解Open3,它非常适合包装子进程。要避免这里的摩擦,请记住堆栈溢出原则:显示您尝试过的内容,尤其是代码。
wrodevlopot:tmp lopot$ ruby test.rb 
lopot
Sat Oct  1 21:57:42 CEST 2016