Comment rediriger stderr et stdout vers un fichier pour un script Ruby?Comment rediriger stderr et stdout vers un fichier pour un script Ruby?
Répondre
./yourscript.rb 2>&1 > log.txt
Redirigera stdout et stderr dans le même fichier.
En supposant que vous utilisez sur * nix –
@Steve: Je pense que '>' fonctionne sous Windows - je ne suis pas sûr de '2>'. –
Cela fonctionnera aussi sur Windows. – gthomaslynch
De dans un script Ruby, vous pouvez rediriger stdout
et stderr
avec la méthode 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
Comment normal $ stdout peut-il être restauré par la suite? – shevy
pourquoi devrions-nous utiliser la méthode rouvrir? cela signifie que si "out.txt" n'existe pas, il sera créé? – wind
Jetez un coup d'œil à [cette réponse] (http://stackoverflow.com/a/22777806/1287376) pour savoir comment restaurer $ stdout par la suite. –
Note: réouverture des flux standard vers/dev/null est une bonne vieille méthode d'aider un processus pour devenir un démon. Par exemple:
# daemon.rb
$stdout.reopen("/dev/null", "w")
$stderr.reopen("/dev/null", "w")
Que voulez-vous dire par «aider un processus à devenir un démon»? – silvamerica
Sous UNIX, pour que le programme devienne un démon, le programmeur ne doit pas simplement le mettre en arrière-plan, mais également rediriger ses flux d'E/S standard. Connaissez-vous cela? –
Note: Si vous utilisez 'Process.daemon' intégré, il peut le faire pour vous. Voir [docs ici] (http://ruby-doc.org/core-2.2.2/Process.html#method-c-daemon). – captainpete
def silence_stdout
$stdout = File.new('/dev/null', 'w')
yield
ensure
$stdout = STDOUT
end
Bon, mais c'est mieux, dans le cas où STDOUT était autre chose. http://stackoverflow.com/a/4459463/26604 –
question connexe: http://stackoverflow.com/questions/4459330/how-do-i-temporarily-redirect-stderr-in-ruby –