Comment rediriger stderr et stdout vers un fichier pour un script Ruby ?
Comment peut-on rétablir un $stdout normal par la suite ?
Comment rediriger stderr et stdout vers un fichier pour un script Ruby ?
De dans un script Ruby vous pouvez rediriger stdout
y stderr
avec le IO#reopen
método.
# 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
Pourquoi devrions-nous utiliser la méthode reopen ? cela signifie que si "out.txt" n'existe pas, il sera créé ?
Sous UNIX, pour qu'un programme devienne un démon, le programmeur ne doit pas seulement le faire passer en arrière-plan, mais aussi rediriger ses flux d'entrée/sortie standard. Cela vous est-il familier ?
Remarque : Si vous utilisez des Process.daemon
il peut le faire pour vous. Voir documents ici .
Bon, mais ceci est mieux, au cas où STDOUT serait autre chose. stackoverflow.com/a/4459463/26604
@Steve : Je pense >
fonctionne sous Windows, mais je ne suis pas sûr que ce soit le cas. 2>
cependant.
Un exemple complet avec $stdout et $stderr redirigés vers un fichier et comment restaurer le comportement initial.
#!/usr/bin/ruby
logfile = "/tmp/testruby.log"
@original_stdout = $stderr.dup
@original_stderr = $stderr.dup
$stdout.reopen(logfile, "w")
$stdout.sync = true
$stderr.reopen($stdout)
def restore_stdout
$stdout.reopen(@original_stdout)
$stderr.reopen(@original_stderr)
end
def fail_exit(msg)
puts "- #{msg}" # to the logfile
restore_stdout
$stderr.puts "+ #{msg}" # to standard error
exit!
end
def success_exit(msg)
puts "- #{msg}" # to the logfile
restore_stdout
$stdout.puts "+ #{msg}" # to standard output
exit
end
puts "This message goes to the file"
success_exit "A successful exit message"
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
1 votes
Question connexe : stackoverflow.com/questions/4459330/