[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

Ignore printout

Fredrik

10/12/2007 2:38:00 AM

I am using a compiled C-code in my Ruby program. The problem is that
the C-code prints some messages that I don't want to show in my Ruby
program. What would be the best way to get rid of these printouts?

I don't want to get into the original C-code and take away the print
commands since that is not my code. Are the printouts sent directly to
standard output, meaning there is no way for Ruby to interfere?

Thanks for any help!

/Fredrik

9 Answers

mortee

10/12/2007 3:55:00 AM

0

Eric Hodel

10/12/2007 4:18:00 AM

0

On Oct 11, 2007, at 19:40 , Fredrik wrote:

> I am using a compiled C-code in my Ruby program. The problem is that
> the C-code prints some messages that I don't want to show in my Ruby
> program. What would be the best way to get rid of these printouts?
>
> I don't want to get into the original C-code and take away the print
> commands since that is not my code. Are the printouts sent directly to
> standard output, meaning there is no way for Ruby to interfere?

You will need to reopen STDOUT to /dev/null

--
Poor workers blame their tools. Good workers build better tools. The
best workers get their tools to do the work for them. -- Syndicate Wars



Fredrik

10/12/2007 5:42:00 AM

0

>
> You will need to reopen STDOUT to /dev/null
>

Then I have two more questions to that :)

1) What's the difference between $stdout and STDOUT? They seem to be
the same thing.

2) In my pickaxe book I read that "Assignment to $stdout is
depracated; use $stdout.reopen instead." But if I want to redirect
$stdout and then $direct it back to what it was before, surely I HAVE
to use assignment to $stdout. Like this:

out = $stdout
$stdout = File.new('/dev/null','w')
puts 'This is not to be seen by anybody.'
$stdout.reopen(out)

If I use reopen on the second line instead, the 'out' variable comes
along to this new value and nobody knows where the "usual stdout" is,
right?

Fredrik

10/12/2007 6:04:00 AM

0

I should clarify myself:
I was expecting to find that STDOUT is a constant so that I could do:

$stdout.reopen(File.new('/dev/null','w'))
puts 'Nobody can see this.'
$stdout.reopen(STDOUT)

But after the first line, my STDOUT is pointing to the exact same
place as $stdout. Isn't that weird?

Fredrik

10/12/2007 6:47:00 AM

0

Well, this does the trick (note the 'clone' instruction on line 1). It
seems to be working nicely also for the compiled binary that I am
calling.

out = $stdout.clone
$stdout.reopen(File.new('/dev/null','w'))
puts 'You cant see this!'
$stdout.reopen(out)

I am still confused over why STDOUT is not a constant though...
Thanks for your pointers!

mortee

10/12/2007 10:43:00 AM

0

Wolfgang Nádasi-donner

10/12/2007 12:43:00 PM

0

Fredrik wrote:
> out = $stdout
> $stdout = File.new('/dev/null','w')
> puts 'This is not to be seen by anybody.'
> $stdout.reopen(out)

Only as an remark - on Windows you should use

$stdout = File.open("nul:", "w")

to ignore Output, and

$stdout = STDOUT

to reset.

Wolfgang Nádasi-Donner
--
Posted via http://www.ruby-....

Eric Hodel

10/12/2007 3:15:00 PM

0

On Oct 11, 2007, at 22:45 , Fredrik wrote:
>> You will need to reopen STDOUT to /dev/null
>
> Then I have two more questions to that :)
>
> 1) What's the difference between $stdout and STDOUT? They seem to be
> the same thing.

http://blog.segment7.net/articles/2006/08/17/stdout...

In your case you want to reopen STDOUT because somebody using your
code may have changed $stdout, if they want to capture or redirect
output.

> 2) In my pickaxe book I read that "Assignment to $stdout is
> depracated; use $stdout.reopen instead." But if I want to redirect
> $stdout and then $direct it back to what it was before, surely I HAVE
> to use assignment to $stdout. Like this:

I don't think this is true anymore. You can't reopen using StringIO
to capture regular ruby puts or p.

> out = $stdout
> $stdout = File.new('/dev/null','w')
> puts 'This is not to be seen by anybody.'
> $stdout.reopen(out)
>
> If I use reopen on the second line instead, the 'out' variable comes
> along to this new value and nobody knows where the "usual stdout" is,
> right?

Right, you should dup $stdout there.

--
Poor workers blame their tools. Good workers build better tools. The
best workers get their tools to do the work for them. -- Syndicate Wars



Exocet Missile

2/17/2012 5:13:00 PM

0

In article <nqfsj79anm6qlja20g06cm7f4rtcfjabvh@4ax.com>,
The Revd <peeling@degenerate.Grik> wrote:

> It's formal, guys -- limey women are the ugliest:
>
> http://tinyurl.c...

Pfft. Tell us something we didn't know.