出力を捨てる

$stdout=StringIO.newとすると不要なバッファリングをしてしまう。
$stdout=open('/dev/null','w')とするとOS依存になってしまう。

$stdout, $stderr に設定されるオブジェクトには write という名の メソッドが定義されている必要があります。

http://www.ruby-lang.org/ja/man/?cmd=view;name=%C1%C8%A4%DF%B9%FE%A4%DF%CA%D1%BF%F4

逆に言えば、writeさえあればいいわけだ。
というわけで、そういうオブジェクトを作ることにした。

全バイトが書き込み出来るまでリトライしてくれるような気の利いた処理があると面倒なので、
実際には1文字も書き込んでないけど、一応 length を返しておく。

NULL=Object.new
def NULL.write(s) s.length end

puts '出力停止前'
$stdout=NULL
puts '出力停止中'
$stdout=STDOUT
puts '出力再開'

実行結果

出力停止前
出力再開