禁用输出缓冲

禁用输出缓冲

Python的解释器默认启用输出缓冲sys.stdout吗?

如果答案是肯定的,那么禁用它的所有方法是什么?

建议到目前为止:

  1. 使用-u命令行开关

  2. 包装sys.stdout在每次写入后刷新的对象

  3. 设置PYTHONUNBUFFEREDenv var

  4. sys.stdout = os.fdopen(sys.stdout.fileno(), 'w', 0)

是否有任何其他方式来设置一些全局标志syssys.stdout程序执行过程中?


哔哔one
浏览 771回答 4
4回答

桃花长相依

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

ABOUTYOU

我宁愿把答案放在如何刷新Python打印输出?或者在Python的print函数中,在调用缓冲区时刷新缓冲区?,但由于它们被标记为这个副本(我不同意),我会在这里回答。由于Python 3.3 print()支持关键字参数“flush”(参见文档):print('Hello World!', flush=True)

四季花海

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

临摹微笑

是的。您可以使用“-u”开关在命令行上禁用它。或者,您可以在每次写入时在sys.stdout上调用.flush()(或者使用自动执行此操作的对象将其包装)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python