禁用输出缓冲 [英] Disable output buffering

查看:51
本文介绍了禁用输出缓冲的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

Is output buffering enabled by default in Python's interpreter for sys.stdout?

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

If the answer is positive, what are all the ways to disable it?

目前的建议:

  1. 使用-u命令行开关
  2. sys.stdout 包装在每次写入后刷新的对象中
  3. 设置 PYTHONUNBUFFERED 环境变量
  4. sys.stdout = os.fdopen(sys.stdout.fileno(), 'w', 0)
  1. Use the -u command line switch
  2. Wrap sys.stdout in an object that flushes after every write
  3. Set PYTHONUNBUFFERED env var
  4. sys.stdout = os.fdopen(sys.stdout.fileno(), 'w', 0)

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

Is there any other way to set some global flag in sys/sys.stdout programmatically during execution?

推荐答案

来自 Magnus Lycka 在邮件列表中的回答:

你可以跳过整个缓冲使用python -u"的python进程(或#!/usr/bin/env python -u 等)或通过设置环境变量PYTHONUNBUFFERED.

You can skip buffering for a whole python process using "python -u" (or#!/usr/bin/env python -u etc) or by setting the environment variable PYTHONUNBUFFERED.

您也可以将 sys.stdout 替换为其他一些流,如包装器每次调用后都会刷新.

You could also replace sys.stdout with some other stream like wrapper which does a flush after every call.

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'

这篇关于禁用输出缓冲的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆