Rubyスクリプト用にstderrとstdoutをファイルにリダイレクトするにはどうすればよいですか?
Rubyスクリプト内から、 IO#reopen
メソッドを使用してstdout
およびstderr
をリダイレクトできます。
# a.rb
$stdout.reopen("out.txt", "w")
$stderr.reopen("err.txt", "w")
puts 'normal output'
warn 'something to stderr'
$ ls a.rb $ Ruby a.rb $ ls a.rb err.txt out.txt $ cat err.txt someder to stderr $ cat out.txt normal output
注:標準ストリームを/ dev/nullに再度開くことは、プロセスがデーモンになるのを助ける古き良き方法です。例えば:
# daemon.rb
$stdout.reopen("/dev/null", "w")
$stderr.reopen("/dev/null", "w")
def silence_stdout
$stdout = File.new( '/dev/null', 'w' )
yield
ensure
$stdout = STDOUT
end
./yourscript.rb 2>&1 > log.txt
stdoutとstderrを同じファイルにリダイレクトします。