禁用输出缓冲 [英] Disable output buffering
问题描述
是否在 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?
目前的建议:
- 使用
-u
命令行开关 - 将
sys.stdout
包装在每次写入后刷新的对象中 - 设置
PYTHONUNBUFFERED
环境变量 sys.stdout = os.fdopen(sys.stdout.fileno(), 'w', 0)
- Use the
-u
command line switch - Wrap
sys.stdout
in an object that flushes after every write - Set
PYTHONUNBUFFERED
env var 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?
推荐答案
你可以跳过整个缓冲使用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屋!