如何将stderr和stdoutredirect到一个Ruby脚本文件?

如何将stderr和stdoutredirect到一个Ruby脚本文件?

在Ruby脚本中 ,可以使用IO#reopen方法redirectstdoutstderr

 # 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 
有一些情况
 $ cat out.txt 
正常输出

注意:将标准stream重新打开到/ 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和stderrredirect到同一个文件。