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-forum.com/ .
fedzor
(fedzor)
15 July 2008 21:17
2
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.
···
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.
Janus this works for me:
def processing
print "Processing... "
sleep(3)
print "done!"
end
processing
···
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-forum.com/\ .
--
"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)
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-forum.com/\ .
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
···
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
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.
···
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-forum.com/\ .
--
"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)
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-forum.com/ .