我必须从Ruby脚本执行shell命令,但我必须检索输出,以便稍后可以在脚本中使用它。
这是我的代码:
output = system "heroku create" # => true
但是系统命令返回一个布尔值,而不是输出。
简单地说,系统“heroku create”必须输出到我的屏幕(它确实如此),但也返回输出,以便我可以处理它。
答案 0 :(得分:12)
答案 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。
编辑:添加了额外的流结算细节。谢谢克里斯托弗和格雷戈里。