禁用输出缓冲Python的解释器默认启用输出缓冲sys.stdout吗?如果答案是肯定的,那么禁用它的所有方法是什么?建议到目前为止:使用-u命令行开关包装sys.stdout在每次写入后刷新的对象设置PYTHONUNBUFFEREDenv varsys.stdout = os.fdopen(sys.stdout.fileno(), 'w', 0)是否有任何其他方式来设置一些全局标志sys/ sys.stdout程序执行过程中?
4 回答
桃花长相依
TA贡献1860条经验 获得超8个赞
您可以使用“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'
ABOUTYOU
TA贡献1812条经验 获得超5个赞
我宁愿把答案放在如何刷新Python打印输出?或者在Python的print函数中,在调用缓冲区时刷新缓冲区?,但由于它们被标记为这个副本(我不同意),我会在这里回答。
由于Python 3.3 print()支持关键字参数“flush”(参见文档):
print('Hello World!', flush=True)
四季花海
TA贡献1811条经验 获得超5个赞
# reopen stdout file descriptor with write mode# and 0 as the buffer size (unbuffered)sys.stdout = os.fdopen(sys.stdout.fileno(), 'w', 0)
致谢:“塞巴斯蒂安”,在Python邮件列表的某个地方。
第三方编辑
最新版本的Python 3不支持
临摹微笑
TA贡献1982条经验 获得超2个赞
是的。
您可以使用“-u”开关在命令行上禁用它。
或者,您可以在每次写入时在sys.stdout上调用.flush()(或者使用自动执行此操作的对象将其包装)
添加回答
举报
0/150
提交
取消