SImple python print question

2008-05-16 Thread amit . uttam
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.

Thanks for any help.

Amit
--
http://mail.python.org/mailman/listinfo/python-list


Re: SImple python print question

2008-05-16 Thread Hans Nowak

[EMAIL PROTECTED] 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.

Thanks for any help.


'print' sends its output to sys.stdout, which is buffered, and may not be 
displayed immediately (because it's held in the buffer).  To force the output to 
be displayed, use flush():


  print -#- executing: %s % section,
  sys.stdout.flush()
  ...tests here...

Hope this helps!

--Hans
--
http://mail.python.org/mailman/listinfo/python-list


Re: SImple python print question

2008-05-16 Thread Carl Banks
On May 16, 6:38 pm, [EMAIL PROTECTED] 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
--
http://mail.python.org/mailman/listinfo/python-list


Re: SImple python print question

2008-05-16 Thread amit . uttam
On May 16, 4:02 pm, Hans Nowak [EMAIL PROTECTED]
wrote:
 [EMAIL PROTECTED] 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.

  Thanks for any help.

 'print' sends its output to sys.stdout, which is buffered, and may not be
 displayed immediately (because it's held in the buffer).  To force the output 
 to
 be displayed, use flush():

print -#- executing: %s % section,
sys.stdout.flush()
...tests here...

 Hope this helps!

 --Hans

Thanks a lot!

This worked beautifully!
--
http://mail.python.org/mailman/listinfo/python-list


Re: SImple python print question

2008-05-16 Thread amit . uttam
On May 16, 4:03 pm, Carl Banks [EMAIL PROTECTED] wrote:
 On May 16, 6:38 pm, [EMAIL PROTECTED] 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
--
http://mail.python.org/mailman/listinfo/python-list