* ``subunit.run`` now replaces sys.stdout to ensure that stdout is unbuffered
authorRobert Collins <robertc@robertcollins.net>
Tue, 12 Mar 2013 15:30:06 +0000 (04:30 +1300)
committerRobert Collins <robertc@robertcollins.net>
Tue, 12 Mar 2013 15:30:06 +0000 (04:30 +1300)
  - without this pdb output is not reliably visible when stdout is a pipe
  as it usually is. (Robert Collins)

NEWS
python/subunit/run.py

diff --git a/NEWS b/NEWS
index 932ccd7..90da705 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -29,6 +29,10 @@ and applications should migrate once their language has those API's available.
 IMPROVEMENTS
 ~~~~~~~~~~~~
 
+* ``subunit.run`` now replaces sys.stdout to ensure that stdout is unbuffered
+  - without this pdb output is not reliably visible when stdout is a pipe
+  as it usually is. (Robert Collins)
+
 * v2 protocol draft included in this release.
   (Robert Collins)
 
index d0a4a91..b78bf32 100755 (executable)
@@ -20,6 +20,7 @@
   $ python -m subunit.run mylib.tests.test_suite
 """
 
+import io
 import os
 import sys
 
@@ -109,5 +110,11 @@ if __name__ == '__main__':
     # on non-ttys.
     stream = get_default_formatter()
     runner = SubunitTestRunner
+    # Patch stdout to be unbuffered, so that pdb works well.
+    binstdout = io.open(sys.stdout.fileno(), 'wb', 0)
+    if sys.version_info[0] > 2:
+        sys.stdout = io.TextIOWrapper(binstdout, encoding=sys.stdout.encoding)
+    else:
+        sys.stdout = binstdout
     SubunitTestProgram(module=None, argv=sys.argv, testRunner=runner,
         stdout=sys.stdout)