我正在尝试在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
中搜索到的叮咬。怎么做到这一点?
答案 0 :(得分:1)
如果输出非常短并且您希望将整个输出缓冲为单个字符串,则只需使用反引号:
`#{_shellScript}`
您还可以将所有stderr重定向到stdout,如下所示
`#{_shellScript} &2>1`
以下是通过反引号和其他替代方法执行的快速概述:
答案 1 :(得分:1)
如果你想使用Open3,他们的documentation page告诉stdout,stderr,......是流:
在您的代码中,您可以执行以下操作:
puts stdout.read
puts stdin.read
puts stderr.read
完全偏离主题,但从IT安全的角度来看,确保您有足够的支票,您不应该真正执行从互联网“grepped”的命令。