SImple python print question

Carl Banks pavlovevidence at gmail.com
Fri May 16 19:03:15 EDT 2008


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



More information about the Python-list mailing list