Ruby 1.9.2 リファレンスマニュアル > ライブラリ一覧 > library _builtin > module Kernel > $>
$>
$stdout
標準出力です。
組み込み関数 Kernel.#print、Kernel.#puts や Kernel.#p などのデフォルトの出力先となります。 初期値は Kernel::STDOUT です。 [[unknown:Rubyの起動/-i[extension]]] オプションを指定した場合には 読み込み元と同じ名前のファイルを表します。
$stdout に代入するオブジェクトには write という名前のメソッドが定義されていなければいけません。
自プロセスの標準出力をリダイレクトしたいときには、 以下のように $stdout に代入すれば十分です。
# 標準出力の出力先を /tmp/foo に変更 $stdout = File.open("/tmp/foo", "w") puts "foo" # 出力する $stdout = STDOUT # 元に戻す
自プロセスだけでなく、子プロセスの標準出力もリダイレクトしたいときは 以下のように IO#reopen を使います。
STDOUT.reopen("/tmp/foo", "w")
また、リダイレクトしたあと 出力先をまた元に戻したい場合は以下のようにします。
stdout_old = $stdout.dup # 元の $stdout を保存する $stdout.reopen("/tmp/foo") # $stdout を /tmp/foo にリダイレクトする puts "foo" # /tmp/foo に出力 $stdout.flush # 念のためフラッシュする $stdout.reopen stdout_old # 元に戻す
$stdout はグローバルスコープです。