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序列之list和tuple常用方法以及注意事项
Jan 09 Python
PyQt5每天必学之像素图控件QPixmap
Apr 19 Python
对Python3中的print函数以及与python2的对比分析
May 02 Python
Python文件监听工具pyinotify与watchdog实例
Oct 15 Python
浅谈PySpark SQL 相关知识介绍
Jun 14 Python
Django ModelForm操作及验证方式
Mar 30 Python
Python图片处理模块PIL操作方法(pillow)
Apr 07 Python
keras中的loss、optimizer、metrics用法
Jun 15 Python
Python 爬虫性能相关总结
Aug 03 Python
利用python清除移动硬盘中的临时文件
Oct 28 Python
windows+vscode安装paddleOCR运行环境的步骤
Nov 11 Python
python爬虫--selenium模块
Mar 31 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 adodb分页实现代码
2009/03/19 PHP
PHP中file_get_contents高?用法实例
2014/09/24 PHP
PHP中遇到的时区问题解决方法
2015/07/23 PHP
PHP常用技巧汇总
2016/03/04 PHP
PHP微信开发之根据用户回复关键词\位置返回附近信息
2016/06/24 PHP
PHP不使用递归的无限级分类简单实例
2016/11/05 PHP
JS 密码强度验证(兼容IE,火狐,谷歌)
2010/03/15 Javascript
到处都是jQuery选择器的年代 不了解它们的性能,行吗
2012/06/18 Javascript
火狐和ie下获取javascript 获取event的方法(推荐)
2016/11/26 Javascript
用js制作淘宝放大镜效果
2020/10/28 Javascript
JavaScript折半查找(二分查找)算法原理与实现方法示例
2018/08/06 Javascript
微信小程序CSS3动画下拉菜单效果
2018/11/04 Javascript
原生js实现公告滚动效果
2021/01/10 Javascript
Angular7中创建组件/自定义指令/管道的方法实例详解
2019/04/02 Javascript
JavaScript函数式编程(Functional Programming)声明式与命令式实例分析
2019/05/21 Javascript
vue从零实现一个消息通知组件的方法详解
2020/03/16 Javascript
JavaScript实现手机号码 3-4-4格式并控制新增和删除时光标的位置
2020/06/02 Javascript
python实现DNS正向查询、反向查询的例子
2014/04/25 Python
Python在groupby分组后提取指定位置记录方法
2018/04/20 Python
django实现web接口 python3模拟Post请求方式
2019/11/19 Python
Jupyter Notebook打开任意文件夹操作
2020/04/14 Python
python如何支持并发方法详解
2020/07/25 Python
CSS3改变浏览器滚动条样式
2019/01/04 HTML / CSS
T3官网:头发造型工具
2019/12/26 全球购物
德国家具、照明、家居用品网上商店:Wayfair.de
2020/02/13 全球购物
我为自己代言广告词
2014/03/18 职场文书
软件专业毕业生个人自我鉴定
2014/04/17 职场文书
生物科学专业毕业生求职信
2014/06/02 职场文书
最美护士演讲稿
2014/08/27 职场文书
小班上学期幼儿评语
2014/12/30 职场文书
总经理检讨书范文
2015/02/16 职场文书
员工工作表现自我评价
2015/03/06 职场文书
大学军训心得体会800字
2016/01/11 职场文书
Python入门之使用pandas分析excel数据
2021/05/12 Python
Redis高可用集群redis-cluster详解
2022/03/20 Redis
nginx设置资源请求目录的方式详解
2022/05/30 Servers