SImple python print question

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • amit.uttam@gmail.com

    SImple python print question

    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(n ame=config.get( section,'name') )
    3 tests[section].runTest()
    4 printStatus(tes ts[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
  • Hans Nowak

    #2
    Re: SImple python print question

    amit.uttam@gmai l.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(n ame=config.get( section,'name') )
    3 tests[section].runTest()
    4 printStatus(tes ts[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.flus h()
    ...tests here...

    Hope this helps!

    --Hans

    Comment

    • Carl Banks

      #3
      Re: SImple python print question

      On May 16, 6:38 pm, amit.ut...@gmai l.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(n ame=config.get( section,'name') )
      3 tests[section].runTest()
      4 printStatus(tes ts[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.flus h()

      2. Run Python in unbuffered mode, by using the -u switch:

      python -u yourscript.py


      Carl Banks

      Comment

      • amit.uttam@gmail.com

        #4
        Re: SImple python print question

        On May 16, 4:02 pm, Hans Nowak <zephyrfalcon!N O_SP...@gmail.c om>
        wrote:
        amit.ut...@gmai l.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(n ame=config.get( section,'name') )
        3 tests[section].runTest()
        4 printStatus(tes ts[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.flus h()
        ...tests here...
        >
        Hope this helps!
        >
        --Hans
        Thanks a lot!

        This worked beautifully!

        Comment

        • amit.uttam@gmail.com

          #5
          Re: SImple python print question

          On May 16, 4:03 pm, Carl Banks <pavlovevide... @gmail.comwrote :
          On May 16, 6:38 pm, amit.ut...@gmai l.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(n ame=config.get( section,'name') )
          3 tests[section].runTest()
          4 printStatus(tes ts[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.flus h()
          >
          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

          Comment

          Working...