Decorators and buffer flushing
castironpi at gmail.com
castironpi at gmail.com
Thu Feb 28 14:48:55 EST 2008
On Feb 28, 11:49 am, "Ethan Metsger" <emets... at obj-sys.com> wrote:
> Hi, all.
>
> I apologize for what is perhaps a newb question. I'm in the process of
> transitioning our testing framework from Perl to Python. While that alone
> probably sets off some red flags, I'm afraid it's what I'm stuck with.
>
> I'm modeling a test with five operations: build, execute, validate,
> publish, and clean. The main loop might look something like this:
>
> with Test(...) as t:
> t.build()
> t.execute()
> t.validate()
> t.publish()
>
> At each run, I want to output a '.' to denote completion of that test
> step. I've been able to do this, sort of, using the following decorator
> (edited for brevity):
>
> def report(f):
>
> def new(self):
> stat = f(self);
>
> if stat is True:
> sys.stdout.write ('.')
>
> else:
> ...
>
> sys.stdout.flush()
>
> return new
>
> (Each one of the test functions returns True or False depending on its
> completion status.)
>
> The problem is that rather than outputting a period after each step is
> completed, it outputs all four of them at once. Instead of seeing
> progress as it happens, I get it when it's finished, even though I'm
> flushing the output buffer.
>
> Any thoughts?
>
> Best,
>
> Ethan (emets... at obj-sys.com)http://uppertank.net/ethanm/
Can you reproduce the bug on the console? Or, try starting with a new
line in the output. Or, try a input().
More information about the Python-list
mailing list