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

nev*_*ame 7 ruby

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

这是我的代码:

output = system "heroku create" # => true
Run Code Online (Sandbox Code Playgroud)

但系统命令返回布尔值而不是输出.

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

Nul*_*ion 12

你可以用

output = `heroku create`
Run Code Online (Sandbox Code Playgroud)

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

  • http://mentalized.net/journal/2010/03/08/5_ways_to_run_commands_from_ruby/ (5认同)

Ber*_*ard 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
Run Code Online (Sandbox Code Playgroud)

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

require 'open3'

Open3.popen3("heroku create") do |stdin, stdout, stderr|
    puts stdout.read
end
Run Code Online (Sandbox Code Playgroud)

有关完整详细信息,请参阅Open3文档.

编辑:添加额外的流关闭详细信息.谢谢克里斯托弗和格雷戈里.