从Ruby中的“system”命令返回输出?

时间:2010-08-28 08:05:12

标签: ruby

我必须从Ruby脚本执行shell命令,但我必须检索输出,以便稍后可以在脚本中使用它。

这是我的代码:

output = system "heroku create" # => true

但是系统命令返回一个布尔值,而不是输出。

简单地说,系统“heroku create”必须输出到我的屏幕(它确实如此),但也返回输出,以便我可以处理它。

2 个答案:

答案 0 :(得分:12)

您可以使用

output = `heroku create`

请参阅:http://ruby-doc.org/core/classes/Kernel.html

答案 1 :(得分:8)

Open3库使您可以完全访问标准IO流(STDIN,STDOUT和STDERR)。 它是Ruby的一部分,所以不需要安装gem:

require 'open3'

stdin, stdout, stderr = Open3.popen3("heroku create")
puts stdout.read
stdin.close; stdout.close; stderr.close

或者您可以使用阻止关闭流的块形式:

require 'open3'

Open3.popen3("heroku create") do |stdin, stdout, stderr|
    puts stdout.read
end

有关详细信息,请参阅Open3 documentation

编辑:添加了额外的流结算细节。谢谢克里斯托弗和格雷戈里。