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程序中的运用
Mar 02 Python
python中解析json格式文件的方法示例
May 03 Python
用Eclipse写python程序
Feb 10 Python
在Python中使用defaultdict初始化字典以及应用方法
Oct 31 Python
Windows 安装 Anaconda3+PyCharm的方法步骤
Jun 13 Python
pandas.cut具体使用总结
Jun 24 Python
Python进阶之使用selenium爬取淘宝商品信息功能示例
Sep 16 Python
Python numpy多维数组实现原理详解
Mar 10 Python
Python 线性回归分析以及评价指标详解
Apr 02 Python
Python识别验证码的实现示例
Sep 30 Python
基于Python中Remove函数的用法讨论
Dec 11 Python
python中openpyxl和xlsxwriter对Excel的操作方法
Mar 01 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
手冲咖啡应该是现代精品咖啡店的必备选项吗?
2021/03/03 冲泡冲煮
关于PHP中的Class的几点个人看法
2006/10/09 PHP
php 正则 过滤html 的超链接
2009/06/02 PHP
什么情况下可以不写PHP的闭合标签“?>”
2014/08/28 PHP
PHP多线程类及用法实例
2014/12/03 PHP
盘点PHP和ASP.NET的10大对比!
2015/12/24 PHP
WordPress开发中的get_post_custom()函数使用解析
2016/01/04 PHP
ThinkPHP自定义Redis处理SESSION的实现方法
2016/05/16 PHP
PHP  实现等比压缩图片尺寸和大小实例代码
2016/10/08 PHP
Laravel中encrypt和decrypt的实现方法
2017/09/24 PHP
Javascript Ajax异步读取RSS文档具体实现
2013/12/12 Javascript
JS简单实现String转Date的方法
2016/03/02 Javascript
AngularJs  unit-testing(单元测试)详解
2016/09/02 Javascript
SpringBoot+Vue前后端分离,使用SpringSecurity完美处理权限问题的解决方法
2018/01/09 Javascript
LayUI switch 开关监听 获取属性值、更改状态的方法
2019/09/21 Javascript
JS 数组基本用法入门示例解析
2020/01/16 Javascript
详解JavaScript 作用域
2020/07/14 Javascript
vue实践---根据不同环境,自动转换请求的url地址操作
2020/09/21 Javascript
[02:11]2016国际邀请赛中国区预选赛最美TA采访现场玩家
2016/06/28 DOTA
[41:12]Liquid vs Secret 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.24
2019/09/10 DOTA
[01:38]女王驾到——至宝魔廷新尊技能&特效展示
2020/06/16 DOTA
Python中对象迭代与反迭代的技巧总结
2016/09/17 Python
Python中数组,列表:冒号的灵活用法介绍(np数组,列表倒序)
2018/04/18 Python
python读取文本中的坐标方法
2018/10/14 Python
Python-Tkinter Text输入内容在界面显示的实例
2019/07/12 Python
详解从Django Allauth中进行登录改造小结
2019/12/18 Python
JD Sports德国官网:英国领先的运动鞋和运动服饰零售商
2018/02/26 全球购物
比驿:全球酒店比价网
2018/06/20 全球购物
潘多拉意大利官方网上商城:网上选购PANDORA珠宝
2018/10/07 全球购物
上课看小说检讨书
2014/02/22 职场文书
奥巴马的演讲稿
2014/05/15 职场文书
我的中国梦口号
2014/06/16 职场文书
小学少先队辅导员述职报告
2015/01/10 职场文书
2015年教师教学工作总结
2015/04/28 职场文书
Android Rxjava3 使用场景详解
2022/04/07 Java/Android
详解CSS3浏览器兼容
2022/12/24 HTML / CSS