SImple python print question

amit.uttam at gmail.com amit.uttam at gmail.com
Fri May 16 20:12:42 EDT 2008


On May 16, 4:03 pm, Carl Banks <pavlovevide... at gmail.com> wrote:
> On May 16, 6:38 pm, amit.ut... at gmail.com wrote:
>
>
>
> > Hey there,
>
> > I have a simple question about python print statement. Take the
> > following code snippet for example...
>
> > 1 print "-#- executing: %s" % section,
> > 2 tests[section] = test.testcase(name=config.get(section,'name'))
> > 3 tests[section].runTest()
> > 4 printStatus(tests[section])
>
> > Now the problem is that line 1 does not get printed until line 4. What
> > I thought would happen is that line 1 gets executed and the user sees
> > that the statement that the test case is executing. Then after the
> > test case executes a "PASS" or "FAIL" appears on the same line as the
> > "-#- executing: 0053" statement.
>
> > e.g.
> > -#- executing: 0053     FAIL
>
> > Some tests take a long time to finish thus the screen is blank until
> > the entire test finishes and the above statement is outputted.
>
> Your standard output uses line-buffering, which means that the
> underlying I/O code stores all the output in memory until it gets a
> newline, only then does it send the output to the terminal (or
> console, or whatever).
>
> Workarounds to this are as follows:
>
> 1. Explicity flush the buffer after any print statements that end with
> a comma:
>
> print "whatever",
> sys.stdout.flush()
>
> 2. Run Python in unbuffered mode, by using the -u switch:
>
> python -u yourscript.py
>
> Carl Banks

Thanks for the reply. This worked as expected. I did not know about
the -u switch, this is good stuff.

Amit



More information about the Python-list mailing list