如何通过Ruby运行程序并访问其标准输入和输出

时间:2018-09-17 15:42:14

标签: ruby

我有一个完全独立的Ruby文件,可以从标准输入读取并写入标准输出。

我有一些要尝试的测试用例。如何将我的输入传递到标准输入到文件,然后根据预期结果测试标准输出?


作为一个例子,这是我已经弄清楚的东西:

有一个文件可以从标准输入中读取数字,将其平方后再写入标准输入

square.rb

#!/usr/local/bin/ruby -w

input = STDIN.read

# square it
puts input.to_i ** 2

完成pass_input_to_file的{​​{1}}方法:

test.rb

2 个答案:

答案 0 :(得分:2)

调用红宝石脚本时,可以使用Ruby Open3 Library提交STDIN。

require 'open3'

def pass_input_to_file(input)
  output, _status = Open3.capture2('path_to_script', :stdin_data => input)
  output
end

答案 1 :(得分:1)

最简单的测试方法可能是让程序查看是否先传递了任何参数。像这样:

#!/usr/local/bin/ruby -w

input = ARGV[0] || STDIN.read

# square it
puts input.to_i ** 2

然后可以进行测试:

def pass_input_to_file(input)
  `path/to/file #{input}`.to_i
end

否则,我将使用expect之类的东西来自动化子外壳。


此外,对于更复杂的程序,使用OptionParser或CLI gem可能比直接查看ARGV要好。