[lnkForumImage]
TotalShareware - Download Free Software

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


 

Forums >

comp.lang.ruby

Immediately print a string on stdout without new line?

Janus Bor

7/15/2008 9:10:00 PM

Hi everyone!

I'm trying to do something like this:

print "Processing... "

#some fancy code that takes ages, or maybe:
sleep(3)

print "done\n"


I was expecting to get the following output on my console:

Processing... [and after 3 secs:]done

However, the script first waits 3 seconds and then writes the whole line
at once. If I change the first line to

print "Processing...\n"

everything works as expected. But that's not really what I want. Is
there another way of doing this?

Thanks, Janus
--
Posted via http://www.ruby-....

6 Answers

fedzor

7/15/2008 9:17:00 PM

0


On Jul 15, 2008, at 5:09 PM, Janus Bor wrote:

> Hi everyone!
>
> I'm trying to do something like this:
>
> print "Processing... "
>
> #some fancy code that takes ages, or maybe:
> sleep(3)
>
> print "done\n"
>
>
> I was expecting to get the following output on my console:
>
> Processing... [and after 3 secs:]done
>
> However, the script first waits 3 seconds and then writes the whole
> line
> at once.

Try this:

print "Processing... "
STDOUT.flush

sleep 3

puts "done"

STDOUT#flush will ensure that everything in the buffer will be
printed, there and then


~ Ari
English is like a pseudo-random number generator - there are a
bajillion rules to it, but nobody cares.


Glen Holcomb

7/15/2008 9:17:00 PM

0

[Note: parts of this message were removed to make it a legal post.]

On Tue, Jul 15, 2008 at 3:09 PM, Janus Bor <janus@urban-youth.com> wrote:

> Hi everyone!
>
> I'm trying to do something like this:
>
> print "Processing... "
>
> #some fancy code that takes ages, or maybe:
> sleep(3)
>
> print "done\n"
>
>
> I was expecting to get the following output on my console:
>
> Processing... [and after 3 secs:]done
>
> However, the script first waits 3 seconds and then writes the whole line
> at once. If I change the first line to
>
> print "Processing...\n"
>
> everything works as expected. But that's not really what I want. Is
> there another way of doing this?
>
> Thanks, Janus
> --
> Posted via http://www.ruby-....
>
>
Janus this works for me:

def processing
print "Processing... "
sleep(3)
print "done!"
end

processing

--
"Hey brother Christian with your high and mighty errand, Your actions speak
so loud, I can't hear a word you're saying."

-Greg Graffin (Bad Religion)

Janus Bor

7/15/2008 9:26:00 PM

0

fedzor wrote:
> Try this:
>
> print "Processing... "
> STDOUT.flush
>
> sleep 3
>
> puts "done"
>
> STDOUT#flush will ensure that everything in the buffer will be
> printed, there and then
>

Thank you! That does the trick...


Glen Holcomb wrote:
> Janus this works for me:
>
> def processing
> print "Processing... "
> sleep(3)
> print "done!"
> end
>
> processing
>

Strange, on my machine (Ruby 1.86 on Linux) "Processing... " and "done!"
appear at the same time (after the 3 seconds).
--
Posted via http://www.ruby-....

Glen Holcomb

7/15/2008 9:32:00 PM

0

[Note: parts of this message were removed to make it a legal post.]

On Tue, Jul 15, 2008 at 3:26 PM, Janus Bor <janus@urban-youth.com> wrote:

> fedzor wrote:
> > Try this:
> >
> > print "Processing... "
> > STDOUT.flush
> >
> > sleep 3
> >
> > puts "done"
> >
> > STDOUT#flush will ensure that everything in the buffer will be
> > printed, there and then
> >
>
> Thank you! That does the trick...
>
>
> Glen Holcomb wrote:
> > Janus this works for me:
> >
> > def processing
> > print "Processing... "
> > sleep(3)
> > print "done!"
> > end
> >
> > processing
> >
>
> Strange, on my machine (Ruby 1.86 on Linux) "Processing... " and "done!"
> appear at the same time (after the 3 seconds).
> --
> Posted via http://www.ruby-....
>
>
Until reading fedzor's post I had completely forgotten that different
Operating systems behave differently. I'm on a Windows machine here at
work. Glad you got it fixed though.

--
"Hey brother Christian with your high and mighty errand, Your actions speak
so loud, I can't hear a word you're saying."

-Greg Graffin (Bad Religion)

Tim Pease

7/16/2008 1:38:00 AM

0

On Jul 15, 2008, at 3:17 PM, fedzor wrote:

>
> Try this:
>
> print "Processing... "
> STDOUT.flush
>
> sleep 3
>
> puts "done"
>
> STDOUT#flush will ensure that everything in the buffer will be
> printed, there and then
>

Another option ...


STDOUT.sync = true
print "Processing... "


The sync flag will cause the IO stream to be flushed after every
write / print / puts.

Blessings,
TwP

Dave Bass

7/16/2008 11:52:00 AM

0

Another option: print your message to stderr, not stdout. Stderr is
usually not buffered by the OS (for exactly this sort of reason).

Dave
--
Posted via http://www.ruby-....