Ruby で外部プログラムの標準エラー出力を得る方法

Ruby で外部プログラムの標準エラー出力を得る方法

2007/10/10 6:37am

Ruby で外部プログラムを実行するにはバッククォート文字列がもっとも簡単だ。

s = `command`

こうすると command コマンドを実行し、標準出力の結果を返り値で受け取ることができる。

だが、標準エラーへの出力を得るには別の手段を用いなくてはいけない。

open3

もちろん、あくまでバッククォート文字列にこだわって、標準エラーを標準出力にリダイレクトする、なんてのもあるわけだが、

s = `command 2>&1`

これだと返り値には標準出力と標準エラーがまじってしまうので、添付ライブラリの open3 を使うのがいいだろう。

require 'open3'

Open3.popen3("command") do |stdin, stdout, stderr|
  ...
end

Open3.popen3 で外部プログラムを実行し、そのプロセスの標準入力・標準出力・ 標準エラー出力を IO オブジェクトとして取得できる。