我必须从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
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文档.
编辑:添加额外的流关闭详细信息.谢谢克里斯托弗和格雷戈里.