Python 的解释器中是否默认启用输出缓冲sys.stdout?
sys.stdout
如果答案是肯定的,那么禁用它的所有方法是什么?
到目前为止的建议:
-u
PYTHONUNBUFFERED
sys.stdout = os.fdopen(sys.stdout.fileno(), 'w', 0)
有没有其他方法可以在执行期间以编程方式在sys/中设置一些全局标志sys.stdout?
sys
来自Magnus Lycka 在邮件列表中的回答:
您可以使用“python -u”(或#!/usr/bin/env python -u 等)或通过设置环境变量 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'
您可以使用“python -u”(或#!/usr/bin/env python -u 等)或通过设置环境变量 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'