禁用输出缓冲

新手上路,请多包涵

Python 的解释器中是否默认启用了输出缓冲 sys.stdout

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

到目前为止的建议:

  1. 使用 -u 命令行开关
  2. sys.stdout 包装在每次写入后刷新的对象中
  3. 设置 PYTHONUNBUFFERED
  4. sys.stdout = os.fdopen(sys.stdout.fileno(), 'w', 0)

有没有其他方法可以在执行期间以编程方式在 sys / sys.stdout 中设置一些全局标志?

原文由 Eli Bendersky 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 817
2 个回答

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

原文由 Seb 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题