Python-禁用输出缓冲
默认情况下,Python的解释器是否启用输出缓冲sys.stdout
?
如果答案是肯定的,那么有什么方法可以禁用它?
到目前为止的建议:
- 使用
-u
命令行开关 - 包装
sys.stdout
每次写入后刷新的对象 - 设置环境
PYTHONUNBUFFERED
变量 sys.stdout = os.fdopen(sys.stdout.fileno(), 'w', 0)
还有其他方法可以在执行过程中以编程方式在sys/
中设置一些全局标志sys.stdout
吗?
-
你可以使用”python -u”(
or#!/usr/bin/env python -u etc
)或通过设置环境变量PYTHONUNBUFFERED来跳过整个python进程的缓冲。你还可以将
sys.stdout
替换为包装器之类的其他流,该流在每次调用后进行刷新。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'