在ruby代码中执行shell脚本

时间:2014-06-17 05:45:19

标签: ruby-on-rails ruby

我正在尝试在ruby代码中执行shell脚本并返回结果。一世 我正在使用Open3。 这是代码:

#!/usr/bin/env ruby

require 'rubygems'
require 'uri'
require 'net/http'

require 'open3' # require 'open3' in 1.9
AppArgs = Array.new

def get()    
  source = Net::HTTP.get('integration.twosmiles.com', '/status')
  _shellScript = "grep 'commit' status.html"
  fileHtml = File.new("status.html", "w+")
  fileHtml.puts source
  Open3.popen3(_shellScript) do |stdin, stdout, stderr|
    puts stdout
    puts stdin
    puts stderr

  end
end

get()

但它打印

#<IO:0x00000000a41ca8>
#<IO:0x00000000a41cf8>
#<IO:0x00000000a41c30>

我希望得到stdout中搜索到的叮咬。怎么做到这一点?

2 个答案:

答案 0 :(得分:1)

如果输出非常短并且您希望将整个输出缓冲为单个字符串,则只需使用反引号:

`#{_shellScript}`

您还可以将所有stderr重定向到stdout,如下所示

`#{_shellScript} &2>1`

以下是通过反引号和其他替代方法执行的快速概述:

Ruby, Difference between exec, system and %x() or Backticks

答案 1 :(得分:1)

如果你想使用Open3,他们的documentation page告诉stdout,stderr,......是流:

在您的代码中,您可以执行以下操作:

puts stdout.read
puts stdin.read
puts stderr.read

完全偏离主题,但从IT安全的角度来看,确保您有足够的支票,您不应该真正执行从互联网“grepped”的命令。