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关键字and和or用法实例
May 28 Python
Python实现将绝对URL替换成相对URL的方法
Jun 28 Python
详解python单例模式与metaclass
Jan 15 Python
Python 实现购物商城,含有用户入口和商家入口的示例
Sep 15 Python
Python3 循环语句(for、while、break、range等)
Nov 20 Python
Python多进程库multiprocessing中进程池Pool类的使用详解
Nov 24 Python
Python从Excel中读取日期一列的方法
Nov 28 Python
pandas删除行删除列增加行增加列的实现
Jul 06 Python
python中open函数的基本用法示例
Sep 07 Python
python3 求约数的实例
Dec 05 Python
Python批量处理csv并保存过程解析
May 16 Python
浅谈keras中自定义二分类任务评价指标metrics的方法以及代码
Jun 11 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采集利器 Snoopy 试用心得
2011/07/03 PHP
调试一段PHP程序时遇到的三个问题
2012/01/17 PHP
PHP实现CSV文件的导入和导出类
2015/03/24 PHP
php实现异步数据调用的方法
2015/12/24 PHP
简单实现PHP留言板功能
2016/12/21 PHP
php PDO判断连接是否可用的实现方法
2017/04/03 PHP
告诉大家什么是JSON
2008/06/10 Javascript
Extjs在exlipse中设置自动提示的方法
2010/04/07 Javascript
javascript实现json页面分页实例代码
2014/02/20 Javascript
html的DOM中Event对象onabort事件用法实例
2015/01/21 Javascript
JavaScript操作class和style样式代码详解
2016/02/13 Javascript
JS实现兼容各种浏览器的获取选择文本的方法【测试可用】
2016/06/21 Javascript
vue2组件实现懒加载浅析
2017/03/29 Javascript
AngularJs ng-change事件/指令的用法小结
2017/11/01 Javascript
使用layui实现树形结构的方法
2019/09/20 Javascript
详解webpack的clean-webpack-plugin插件报错
2020/10/16 Javascript
在nuxt中使用路由重定向的实例
2020/11/06 Javascript
Python自定义进程池实例分析【生产者、消费者模型问题】
2016/09/19 Python
JavaScript实现一维数组转化为二维数组
2018/04/17 Python
python利用跳板机ssh远程连接redis的方法
2019/02/19 Python
Django网络框架之HelloDjango项目创建教程
2019/06/06 Python
django的auth认证,authenticate和装饰器功能详解
2019/07/25 Python
详解Python在使用JSON时需要注意的编码问题
2019/12/06 Python
pytorch 彩色图像转灰度图像实例
2020/01/13 Python
浅析css3中matrix函数的使用
2016/06/06 HTML / CSS
美国高级工作服品牌:Carhartt
2018/01/25 全球购物
澳洲健康食品网上商店:Aussie Health Products
2018/06/15 全球购物
How TDD works
2012/09/30 面试题
光盘行动倡议书
2014/02/02 职场文书
小松树教学反思
2014/02/11 职场文书
2015年财务工作总结范文
2015/03/31 职场文书
工作调动申请报告
2015/05/18 职场文书
2015年高二班主任工作总结
2015/05/25 职场文书
SpringRetry重试框架的具体使用
2021/07/25 Java/Android
MySQL表锁、行锁、排它锁及共享锁的使用详解
2022/04/02 MySQL
Typescript类型系统FLOW静态检查基本规范
2022/05/25 Javascript