kind=defined
names=>,stdout
visibility=public

--- $>
--- $stdout
-- $defout

標準出力です。

組み込み関数 [[m:Kernel.#print]]、[[m:Kernel.#puts]] や
[[m:Kernel.#p]] などのデフォルトの出力先となります。
初期値は [[m:Kernel::STDOUT]] です。
[[unknown:Rubyの起動/-i[extension]]] オプションを指定した場合には
読み込み元と同じ名前のファイルを表します。

$stdout には $defout という別名がありますが、
$defout は非推奨([[unknown:obsolete]])になったので、
新しいコードでは常に $stdout を使ってください。

$stdout に代入するオブジェクトには
write という名前のメソッドが定義されていなければいけません。

自プロセスの標準出力をリダイレクトしたいときには、
以下のように $stdout に代入すれば十分です。

    # 標準出力の出力先を /tmp/foo に変更
    $stdout = File.open("/tmp/foo", "w")
    puts "foo"         # 出力する
    $stdout = STDOUT   # 元に戻す

自プロセスだけでなく、子プロセスの標準出力もリダイレクトしたいときは
以下のように [[m: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 はグローバルスコープです。



