我想在Ruby中编写一个简单的自动化工具,它应该包装一个命令行程序。
命令行程序的工作方式有点像REPL:命令可以通过STDIN输入,输出返回到STDOUT。因此,Ruby工具需要能够从程序的STDOUT读取输入,并将新命令返回到程序STDIN。
如何设置这样的循环输入/输出? 我不完全确定这个问题是否与Ruby有关,或者它是否更多地涉及到如何在Unix系统中连接流。
答案 0 :(得分:2)
使用IO.popen
实现起来非常简单handler = IO.popen("bash","w+")
handler.puts("whoami")
puts handler.gets
handler.puts("date")
puts handler.gets
handler.close
输出:
wrodevlopot:tmp lopot$ ruby test.rb
lopot
Sat Oct 1 21:57:42 CEST 2016
IO.popen返回一个IO处理程序,请注意我们用w+
打开子进程,这意味着读写。在上面的示例中,我们打开一个发送命令whoami
的bash进程,然后我们从中读取并打印,同样用于命令date
,一旦我们完成了我们调用close的子进程。