Python日志无延迟实时写入的示例


Posted in Python onJuly 11, 2019

我在用python生成日志时,发现无论怎么flush(),文件内容总是不能实时写入,导致程序意外中断时一无所获。

以下是查到的解决方案(亲测可行):

open 函数中有一个bufferin的参数,默认是-1,如果设置为0是,就是无缓冲模式。 
但是用二进制模式打开这个文件,并且把要写入的信息转换byte -like如下。
 
with open("test.txt",'wb',buffering=0) as f:
#wb是写模式加二进制模式
  f.write(b"hello!")在字符串前加b,转换成二进制
 
如果没用二进制打开文件会提示ValueEorror:
 
没把字符串转成二进制会提示:TypeError: a bytes-like object is required, not ‘str'

测试:

class Logger(object):
  def __init__(self, log_path="default.log"):
    self.terminal = sys.stdout
    # self.log = open(log_path, "w+")
    self.log = open(log_path, "wb", buffering=0)
 
  def print(self, message):
    self.terminal.write(message + "\n")
    self.log.write(message.encode('utf-8') + b"\n")
 
  def flush(self):
    self.terminal.flush()
    self.log.flush()
 
  def close(self):
    self.log.close()

报错1:TypeError: can't concat str to bytes

报错2:write需要str对象,无法写入bytes对象(大意)

这是因为:

(1)log.write需要写入bytes对象,这里没问题。但是encode返回的是bytes型的数据,不可以和str相加,需要将‘\n'前加b。

(2)terminal.write函数参数需要为str类型,转化为str。

改为:

def print(self, message):
    self.terminal.write(message + "\n")
    self.log.write(message.encode('utf-8') + b"\n")

运行成功!

以上这篇Python日志无延迟实时写入的示例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
给Python的Django框架下搭建的BLOG添加RSS功能的教程
Apr 08 Python
用Python的SimPy库简化复杂的编程模型的介绍
Apr 13 Python
python实现马耳可夫链算法实例分析
May 20 Python
Python cookbook(数据结构与算法)同时对数据做转换和换算处理操作示例
Mar 23 Python
对python中的for循环和range内置函数详解
Apr 17 Python
Python定义一个跨越多行的字符串的多种方法小结
Jul 19 Python
Python面向对象总结及类与正则表达式详解
Apr 18 Python
python time.sleep()是睡眠线程还是进程
Jul 09 Python
Python 字符串类型列表转换成真正列表类型过程解析
Aug 26 Python
Python单元测试与测试用例简析
Nov 09 Python
python操作微信自动发消息的实现(微信聊天机器人)
Jul 14 Python
Python用access判断文件是否被占用的实例方法
Dec 17 Python
深入了解Python iter() 方法的用法
Jul 11 #Python
用python给自己做一款小说阅读器过程详解
Jul 11 #Python
Python 200行代码实现一个滑动验证码过程详解
Jul 11 #Python
ML神器:sklearn的快速使用及入门
Jul 11 #Python
python 随机森林算法及其优化详解
Jul 11 #Python
python实现从本地摄像头和网络摄像头截取图片功能
Jul 11 #Python
python常用库之NumPy和sklearn入门
Jul 11 #Python
You might like
PHP下打开URL地址的几种方法小结
2010/05/16 PHP
laravel接管Dingo-api和默认的错误处理方式
2019/10/25 PHP
拖动Html元素集合 Drag and Drop any item
2006/12/22 Javascript
关于 byval 与 byref 的区别分析总结
2007/10/08 Javascript
asp.net+js 实现无刷新上传解析csv文件的代码
2010/05/17 Javascript
JS实现超过长度限制后自动跳转下一款文本框的方法
2015/02/23 Javascript
js由下向上不断上升冒气泡效果实例
2015/05/07 Javascript
HTML Table 空白单元格补全的简单实现
2016/10/13 Javascript
JS实现仿PS的调色板效果完整实例
2016/12/21 Javascript
JavaScript插件Tab选项卡效果
2017/11/14 Javascript
Vue中img的src是动态渲染时不显示的解决
2019/11/14 Javascript
javascript的delete运算符知识点总结
2019/11/19 Javascript
[02:11]2016国际邀请赛中国区预选赛全程回顾
2016/07/01 DOTA
[01:07:34]DOTA2-DPC中国联赛定级赛 RNG vs Aster BO3第二场 1月9日
2021/03/11 DOTA
Python开发编码规范
2006/09/08 Python
Python标准库urllib2的一些使用细节总结
2015/03/16 Python
Python随手笔记第一篇(2)之初识列表和元组
2016/01/23 Python
Python实现网站注册验证码生成类
2017/06/08 Python
对python 中re.sub,replace(),strip()的区别详解
2019/07/22 Python
Python中正反斜杠(‘/’和‘\’)的意义与用法
2019/08/12 Python
基于pytorch的lstm参数使用详解
2020/01/14 Python
Lombok插件安装(IDEA)及配置jar包使用详解
2020/11/04 Python
英国家庭、花园、汽车和移动解决方案:Easylife Group
2018/05/23 全球购物
linux面试题参考答案(9)
2015/01/07 面试题
护理学专业推荐信
2013/12/03 职场文书
2014年情人节活动方案
2014/02/16 职场文书
迎元旦广播稿
2014/02/22 职场文书
哈弗商学院毕业生求职信
2014/02/26 职场文书
优秀少先队辅导员事迹材料
2014/12/24 职场文书
2015年度学校卫生工作总结
2015/05/12 职场文书
2016年“5.12”国际护士节活动总结
2016/04/06 职场文书
团组织关系介绍信
2019/06/24 职场文书
js之ajax文件上传
2021/05/13 Javascript
python APScheduler执行定时任务介绍
2022/04/19 Python
微信小程序调用python模型
2022/04/21 Python
win10搭建配置ftp服务器的方法
2022/08/05 Servers