出力を捨てる
$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 '出力再開'
実行結果
出力停止前 出力再開