python - 禁用输出缓冲
在Python的解释器中默认启用输出缓冲sys.stdout吗?
如果答案是肯定的,那么禁用它的所有方法是什么?
建议到目前为止:
使用sys命令行开关
将sys包装在每次写入后刷新的对象中
设置sys env var
sys
有没有其他方法可以在执行期间以编程方式在sys/sys.stdout中设置一些全局标志?
15个解决方案
360 votes
来自Magnus Lycka的回复邮件列表:
你可以跳过缓冲整体 使用“python -u”的python进程 (或#!/ usr / bin / env python -u等)或者 设置环境变量 PYTHONUNBUFFERED。
您也可以用sys替换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 answered 2019-01-05T08:18:36Z
73 votes
# reopen stdout file descriptor with write mode
# and 0 as the buffer size (unbuffered)
sys.stdout = os.fdopen(sys.stdout.fileno(), 'w', 0)
致谢:“塞巴斯蒂安”,在Python邮件列表的某个地方。
Federico A. Ramponi answered 2019-01-05T08:19:00Z
73 vo