Jeremy Tregunna
8/25/2006 9:53:00 PM
On 06-08-25, at 15:30, bradjpeek wrote:
> Inside a ruby script I want to:
>
> 1) redirect STDERR to /dev/null
> 2) Issue a system call (e.g. system(tar xf tarfile file) )
> 3) revert to normal STDERR output
>
> I have a script that issues 3-4 system calls that are returning the
> following message to STDERR:
>
> warning: Insecure world writable dir /opt, mode 040777
>
> I'd like to suppress these messages (Let's assume that I can't change
> the permissions on /opt).
>
> An example of one of the lines that is throwing the error is:
>
> x = `tar tf mytar.tar` # envoke the unix tar command
> print x
>
> I can suppress the messages by:
>
> $stderr.reopen('/dev/null', 'w') # send STDERR to /dev/null
> STDERR.puts "can you see me?" # message is suppressed
>
> But I haven't been able to figure out how to revert STDERR back to
> before the the reopen. I only want to suppress this particular
> message, but not others that may prove to be useful such as error
> messages from the ruby interpreter.
>
> I've tried variations of:
>
> stderr = $stderr # save current STDERR IO instance
> $stderr.reopen('/dev/null', 'w') # send STDERR to /dev/null
> STDERR.puts "can you see me?" # message is suppressed
> $stderr.reopen(stderr) # revert to default behavior
> (doesn't
> work)
> STDERR.puts "what about me? # I want to see this but I don't
>
> Any suggestions?
Modify that slightly:
$stderr_backup = $stderr.dup
$stderr.reopen("/dev/null", "w")
STDERR.puts "should not see this"
$stderr = $stderr_backup.dup
STDERR = $stderr # can safely ignore the warning
STDERR.puts "foo" # will print foo to the screen
I make no guarantees that this is the best way to do it, infact I can
safely say it's probably not.
--
Jeremy Tregunna
jtregunna@blurgle.ca