Rubyで外部のプログラムを起動させて標準エラー出力を得るには open3 を使わないとできないが、 fork() を使ってるためWindowsでは代替の win32-open3 を使って実現する。

まず gem で win32-open3 をインストール

C:\Users\tetsuya>gem install win32-open3
Successfully installed win32-open3-0.3.2-x86-mswin32-60
1 gem installed
Installing ri documentation for win32-open3-0.3.2-x86-mswin32-60...
Installing RDoc documentation for win32-open3-0.3.2-x86-mswin32-60...

次にわざとエラを出して標準エラー出力が受け取れるか確認する。

require 'rubygems'
require 'win32/open3'

stdin, stdout, stderr = *Open3.popen3('ruby -error')
stderr.each{|line|
  print line
}

その結果

-e:1: undefined local variable or method `rror' for main:Object (NameError)

以上。

外部プログラムでエラーでしかほしい情報を返してくれないやつとかいるのでこれが使えると大変便利。