禁用输出缓冲
Python的sys.stdout
解释器默认启用输出缓冲吗?
如果答案是肯定的,那么禁用它的所有方法是什么?
迄今为止的建议:
-u
命令行开关 sys.stdout
包装在每次写入后刷新的对象中 PYTHONUNBUFFERED
env var sys.stdout = os.fdopen(sys.stdout.fileno(), 'w', 0)
是否有任何其他方式来在执行过程中以编程方式在sys
/ sys.stdout
设置全局标志?
来自Magnus Lycka邮件列表上的答案:
您可以使用“python -u”(或#!/ usr / bin / env python -u等)或通过设置环境变量PYTHONUNBUFFERED来跳过整个python进程的缓冲。
你也可以用一些其他的数据流来代替sys.stdout,比如每次调用后都会刷新的wrapper。
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'
# reopen stdout file descriptor with write mode
# and 0 as the buffer size (unbuffered)
sys.stdout = os.fdopen(sys.stdout.fileno(), 'w', 0)
积分:“Sebastian”,在Python邮件列表中的某处。
我宁愿把我的答案放在如何刷新Python打印输出? 或者在Python的打印函数中调用它时刷新缓冲区,但是由于它们被标记为这个缓冲区的重复项(我不同意),我会在这里回答它。
由于Python 3.3 print()支持关键字参数“flush”(请参阅文档):
print('Hello World!', flush=True)
链接地址: http://www.djcxy.com/p/77201.html
下一篇: How to use output of SqlPlus query to prompt user for more input