Tbpgr Blog

Employee Experience Engineer tbpgr(てぃーびー) のブログ

Ruby | CLI | Play Well with Others | Using Open3 to Access the Standard Output and Error Streams Separately

概要

書籍 Build Awesome Command-Line Applications in Ruby2

Play Well with Others

詳細

Rubyではバッククォートもしくは、 %x[] によって標準出力を取得できるが
標準エラーは取得できない。

標準エラーにもアクセスするには Open3ライブラリを利用する。
Open3は capture3というメソッドを持ち、このメソッド
標準出力・標準エラー・ステータスを取得します。

サンプルコード

require 'open3'

stdout_str, stderr_str, exit_status = Open3.capture3('rspec -v')
puts "stdout_str=#{stdout_str}"
puts "stderr_str=#{stderr_str}"
puts "exit_status=#{exit_status}"
puts
stdout_str, stderr_str, exit_status = Open3.capture3('which hoge')
puts "stdout_str=#{stdout_str}"
puts "stderr_str=#{stderr_str}"
puts "exit_status=#{exit_status}"

出力

$ ruby 1.rb
stdout_str=2.14.8
stderr_str=
exit_status=pid 2096 exit 0

stdout_str=
stderr_str=which: no hoge in (・・・各種パス・・・)
exit_status=pid 3272 exit 1