Disable output buffering

output-buffering, python, stdout

Solution

From Magnus Lycka answer on a mailing list:

You can skip buffering for a whole python process using `python -u` or by setting the environment variable PYTHONUNBUFFERED.

You could also replace sys.stdout with some other stream like wrapper which does a flush after every call.

class Unbuffered(object):
   def __init__(self, stream):
       self.stream = stream
   def write(self, data):
       self.stream.write(data)
       self.stream.flush()
   def writelines(self, datas):
       self.stream.writelines(datas)
       self.stream.flush()
   def __getattr__(self, attr):
       return getattr(self.stream, attr)

import sys
sys.stdout = Unbuffered(sys.stdout)
print 'Hello'

Problem

Is output buffering enabled by default in Python's interpreter for `sys.stdout`? If the answer is positive, what are all the ways to disable it? Suggestions so far: - Use the `-u` command line switch - Wrap `sys.stdout` in an object that flushes after every write - Set `PYTHONUNBUFFERED` env var - `sys.stdout = os.fdopen(sys.stdout.fileno(), 'w', 0)` Is there any other way to set some global flag in `sys`/`sys.stdout` programmatically during execution? If you just want to flush after a specific write using `print`, see How can I flush the output of the print function?.

Original source

Related problems