Ruby equivalent to "exec > $logfile 2>&1" in sh script?

People,

I quite frequently have something like:

  exec > $logfile 2>&1

at the top of my shell scripts to output everything that follows (including
errors) into a log file - is there some way of doing the equivalent in a Ruby
script?

Thanks,

Phil.

···

--
Philip Rhoades

Pricom Pty Limited (ACN 003 252 275 ABN 91 003 252 275)
GPO Box 3411
Sydney NSW 2001
Australia
Mobile: +61:(0)411-185-652
Fax: +61:(0)2-8221-9599
E-mail: phil@pricom.com.au

Phil Rhoades wrote:

People,

I quite frequently have something like:

  exec > $logfile 2>&1

at the top of my shell scripts to output everything that follows
(including
errors) into a log file - is there some way of doing the equivalent in a
Ruby
script?

Thanks,

Phil.

This seems to work:

outfile = File.open("output.txt", "w")
$stdout.reopen outfile
$stderr.reopen outfile

puts "hello world!"
system("dir no_exist")

=== output.txt ===

hello world!
Volume in drive C has no label.
Volume Serial Number is 7874-56C8

Directory of C:\
File Not Found

···

--
Posted via http://www.ruby-forum.com/\.

Not really.

$ ruby
outfile = File.open("output.txt", "w")
$stdout.reopen outfile
$stderr.reopen outfile

0.upto 10 do |v| (v%2==0 ? STDOUT : STDERR).puts v; end
$ cat output.txt
1
3
5
7
9
0
2
4
6
8
10

···

On Nov 30, 2006, at 19:24 , El Gato wrote:

Phil Rhoades wrote:

I quite frequently have something like:

  exec > $logfile 2>&1

at the top of my shell scripts to output everything that follows (including errors) into a log file - is there some way of doing the equivalent in a Ruby script?

This seems to work:

outfile = File.open("output.txt", "w")
$stdout.reopen outfile
$stderr.reopen outfile

puts "hello world!"
system("dir no_exist")

--
Eric Hodel - drbrain@segment7.net - http://blog.segment7.net

I LIT YOUR GEM ON FIRE!

Hi all,

Adding $stdout.sync = true; $stderr.sync = true should solve the problem
of stdout and stderr being output of of sync.

See in-line edit below.

$ ruby
outfile = File.open("output.txt", "w")
$stdout.reopen outfile
$stderr.reopen outfile

$stdout.sync = true
$stderr.sync = true

···

On Fri, 2006-01-12 at 16:10 +0900, Eric Hodel wrote:

0.upto 10 do |v| (v%2==0 ? STDOUT : STDERR).puts v; end

--
Rick
rick.tessner@gmail.com