为了账号安全,请及时绑定邮箱和手机立即绑定

禁用输出缓冲

禁用输出缓冲

哔哔one 2019-05-27 15:02:15
禁用输出缓冲Python的解释器默认启用输出缓冲sys.stdout吗?如果答案是肯定的,那么禁用它的所有方法是什么?建议到目前为止:使用-u命令行开关包装sys.stdout在每次写入后刷新的对象设置PYTHONUNBUFFEREDenv varsys.stdout = os.fdopen(sys.stdout.fileno(), 'w', 0)是否有任何其他方式来设置一些全局标志sys/ sys.stdout程序执行过程中?
查看完整描述

4 回答

?
桃花长相依

TA贡献1860条经验 获得超8个赞

来自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'


查看完整回答
反对 回复 2019-05-27
?
ABOUTYOU

TA贡献1812条经验 获得超5个赞

我宁愿把答案放在如何刷新Python打印输出?或者在Python的print函数中,在调用缓冲区时刷新缓冲区?,但由于它们被标记为这个副本(我不同意),我会在这里回答。

由于Python 3.3 print()支持关键字参数“flush”(参见文档):

print('Hello World!', flush=True)


查看完整回答
反对 回复 2019-05-27
?
四季花海

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不支持


查看完整回答
反对 回复 2019-05-27
?
临摹微笑

TA贡献1982条经验 获得超2个赞

是的。

您可以使用“-u”开关在命令行上禁用它。

或者,您可以在每次写入时在sys.stdout上调用.flush()(或者使用自动执行此操作的对象将其包装)


查看完整回答
反对 回复 2019-05-27
  • 4 回答
  • 0 关注
  • 770 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信