Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Ruby > Ignore printout

Reply
Thread Tools

Ignore printout

 
 
Fredrik
Guest
Posts: n/a
 
      10-12-2007
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

 
Reply With Quote
 
 
 
 
mortee
Guest
Posts: n/a
 
      10-12-2007
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 may try to redirect $stdout while the C code runs - I'm not sure
this will work, but it's worth a try.

mortee


 
Reply With Quote
 
 
 
 
Eric Hodel
Guest
Posts: n/a
 
      10-12-2007
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



 
Reply With Quote
 
Fredrik
Guest
Posts: n/a
 
      10-12-2007
>
> 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?

 
Reply With Quote
 
Fredrik
Guest
Posts: n/a
 
      10-12-2007
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?

 
Reply With Quote
 
Fredrik
Guest
Posts: n/a
 
      10-12-2007
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!

 
Reply With Quote
 
mortee
Guest
Posts: n/a
 
      10-12-2007
Fredrik wrote:
> I am still confused over why STDOUT is not a constant though...
> Thanks for your pointers!


I'd guess that when you reopen a stream, then it as an object remains
the same, just what you send it will end up somewhere else than before.
In contrast, when you assign to a variable, the object itself changes
which that variable references.

Since $stdout and STDOUT initially point to the same object, if you dont
assign $stdout, instead you modify the onject itself, the two continue
to reference the same original object. Remember that you can modify a
constant object's state without any warning anyway, so you could even
reopen STDOUT itself.

mortee


 
Reply With Quote
 
Wolfgang Nádasi-Donner
Guest
Posts: n/a
 
      10-12-2007
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-forum.com/.

 
Reply With Quote
 
Eric Hodel
Guest
Posts: n/a
 
      10-12-2007
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/20...dout-vs-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



 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Ignore + TEST + Ignore SpooderStank Computer Support 2 04-08-2004 11:26 AM
Searching for Exact Phrase - should I ignore the ignore words? Rob Meade ASP General 6 03-01-2004 11:28 AM
updated exam printout Mark Scott MCSE 3 11-02-2003 02:18 PM
printout of object property settings TJS ASP .Net 0 10-17-2003 05:17 PM
Can I output a printout as a tif? Mike Grace Java 1 08-27-2003 05:55 PM



Advertisments