web-dev-qa-db-fra.com

Comment rediriger stderr et stdout vers un fichier pour un script Ruby?

Comment rediriger stderr et stdout vers un fichier pour un script Ruby?

41
AOO

À partir de dans un script Ruby , vous pouvez rediriger stdout et stderr avec les IO#reopen méthode.

# 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 
 quelque chose à stderr 
 $ cat out.txt 
 sortie normale 
64
Mark Rushakoff

Remarque: la réouverture des flux standard vers/dev/null est une bonne vieille méthode pour aider un processus à devenir un démon. Par exemple:

# daemon.rb
$stdout.reopen("/dev/null", "w")
$stderr.reopen("/dev/null", "w")
13
argent_smith
def silence_stdout
  $stdout = File.new( '/dev/null', 'w' )
  yield
ensure
  $stdout = STDOUT
end
9
grosser
./yourscript.rb 2>&1 > log.txt

redirigera stdout et stderr vers le même fichier.

4
Richard Fearn