Python 的解释器是否默认为 sys.stdout
启用输出缓冲?
如果答案是肯定的,那么禁用它的方法有哪些?
到目前为止的建议:
- 使用
-u
命令行开关 - 将
sys.stdout
包装在每次写入后刷新的对象中 - 设置
PYTHONUNBUFFERED
环境变量 sys.stdout = os.fdopen(sys.stdout.fileno(), 'w', 0)
有没有其他方法可以在执行期间以编程方式在 sys
/sys.stdout
中设置一些全局标志?
如果您只想在使用print
的特定写入之后刷新,请参阅How can I flush the output of the print function? .
最佳答案
来自 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'
关于python - 禁用输出缓冲,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56667615/