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?.