How do I redirect stderr and stdout to file for a Ruby script? How do I redirect stderr and stdout to file for a Ruby script? ruby ruby

How do I redirect stderr and stdout to file for a Ruby script?


From within a Ruby script, you can redirect stdout and stderr with the IO#reopen method.

# a.rb$stdout.reopen("out.txt", "w")$stderr.reopen("err.txt", "w")puts 'normal output'warn 'something to stderr'
$ lsa.rb$ ruby a.rb$ lsa.rb    err.txt out.txt$ cat err.txt something to stderr$ cat out.txt normal output


Note: reopening of the standard streams to /dev/null is a good old method of helping a process to become a daemon. For example:

# daemon.rb$stdout.reopen("/dev/null", "w")$stderr.reopen("/dev/null", "w")


def silence_stdout  $stdout = File.new( '/dev/null', 'w' )  yieldensure  $stdout = STDOUTend