Ruby 1.8.7 リファレンスマニュアル > ライブラリ一覧 > 組み込みライブラリ > Kernelモジュール > $>
$> -> object
[permalink][rdoc]$stdout -> object
$defout -> object
標準出力です。
組み込み関数 Kernel.#print、Kernel.#puts や Kernel.#p などのデフォルトの出力先となります。 初期値は Object::STDOUT です。 コマンドラインオプションオプション -i を指定した場合には 読み込み元と同じ名前のファイルを表します。
$stdout には $defout という別名がありますが、 $defout は非推奨(obsolete)になったので、 新しいコードでは常に $stdout を使ってください。
$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 はグローバルスコープです。
[SEE_ALSO] Rubyの起動