Как перенаправить stderr и stdout в файл для Ruby script?
Как перенаправить stderr и stdout в файл для Ruby script?
Ответ 1
Внутри Ruby script вы можете перенаправить stdout
и stderr
с помощью метода IO#reopen
.
# 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 something to stderr $ cat out.txt normal output
Ответ 2
Примечание: повторное открытие стандартных потоков в /dev/null является хорошим старым методом, помогающим процессу стать демоном. Например:
# daemon.rb
$stdout.reopen("/dev/null", "w")
$stderr.reopen("/dev/null", "w")
Ответ 3
def silence_stdout
$stdout = File.new( '/dev/null', 'w' )
yield
ensure
$stdout = STDOUT
end
Ответ 4
./yourscript.rb 2>&1 > log.txt
перенаправляет stdout и stderr в один и тот же файл.