標準エラーの吐き捨て

rubyスクリプト内で別の実行ファイルを呼び出し、それが吐く標準エラーをコンソール上に出したくないとき、つまり、bashなどで

make hoge.c 2 > /dev/null

とやるのと同様のことを行うには、STDERRを /dev/null 又は、nul(Windowsの場合)でreopenすればOK.
なので、標準出力を1行ずつ処理し、標準エラーを吐き捨てる時はこんな感じ。

nul_file = FileTest.readable? 'nul' ? 'nul' : '/dev/null'
STDERR.reopen(nul_file, 'w')
io = IO.popen("make hoge.c", 'r')
while line = io.gets
  ...
end