开发者

Return output from "system" command in Ruby?

I have to execute a shell command from Ruby script but I have to retrieve the output so that I can use it in the script later on.

Here is my code:

output = system "heroku create" # => true

But the system command returns a boolean and not the output.

Simply said, system "heroku create" has to output to my screen (which it does) but al开发者_JAVA百科so return the output so I can process it.


You could use

output = `heroku create`

See: http://ruby-doc.org/core/classes/Kernel.html


The Open3 library gives you full access to the standard IO streams (STDIN, STDOUT and STDERR). It's part of Ruby, so there's no need to install a gem:

require 'open3'

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

or you can use the block form which closes the streams implicitely:

require 'open3'

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

See the Open3 documentation for the full details.

Edit: Added extra stream closing details. Thanks Christopher and Gregory.


You can use the following:

output = capture(:stdout) do
  system("pwd") # your system command goes here
end

puts output

shortened version:

output = capture(:stdout) { system("pwd") }

Similarly we can also capture standard errors too with :stderr

capture method is provided by active_support/core_ext/kernel/reporting.rb

Looking at that library's code comments, capture is going to be deprecated, so not sure what is the current supported method name is.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜