Matthew Smillie
7/27/2006 9:02:00 AM
On Jul 27, 2006, at 9:46, Jon Leighton wrote:
> Hi,
>
> I have written a script which sets up a new website on a server.
> Obviously this involves a number of steps so I have written a method
> which looks like so:
>
> def step(msg)
> print msg + "... "
> yield
> puts "done"
> end
>
> The idea being that you write something like:
>
> step("Creating site directory") { [mkdir code here }
>
> This all works fine, except for one thing. I would like the "Creating
> site directory..." to show up *before* the yield takes place, and then
> the "done" would appear afterwards. Currently the whole "Creating site
> directory... done" appears only after the yield has completed, which
> might make the user think something has gone wrong with longer
> steps. I
> don't understand why this happens, can anyone explain my options
> please?
I can't reproduce this on my machine, but it sounds very much like
it's being caused by buffered output. This might work:
def step(msg)
print msg + "..."
STDOUT.flush
yield
puts "done"
end
matthew smillie.