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 xml解析实例详解
Nov 14 Python
详解python发送各类邮件的主要方法
Dec 22 Python
Python:Scrapy框架中Item Pipeline组件使用详解
Dec 27 Python
Python cookbook(数据结构与算法)找出序列中出现次数最多的元素算法示例
Mar 15 Python
Python多进程原理与用法分析
Aug 21 Python
python抓取京东小米8手机配置信息
Nov 13 Python
通过python扫描二维码/条形码并打印数据
Nov 14 Python
Centos7下源码安装Python3 及shell 脚本自动安装Python3的教程
Mar 07 Python
Python 爬虫性能相关总结
Aug 03 Python
详细介绍python类及类的用法
May 31 Python
Python 数据结构之十大经典排序算法一文通关
Oct 16 Python
Python OpenCV实现图形检测示例详解
Apr 08 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
用DBSQL类加快开发MySQL数据库程序的速度
2006/10/09 PHP
PHP图片处理之使用imagecopy函数添加图片水印实例
2014/11/19 PHP
Yii数据读取与跳转参数传递用法实例分析
2016/07/12 PHP
解决form中action属性后面?传递参数 获取不到的问题
2017/07/21 PHP
php中加密解密DES类的简单使用方法示例
2020/03/26 PHP
php设计模式之迭代器模式实例分析【星际争霸游戏案例】
2020/04/07 PHP
javascript showModalDialog,open取得父窗口的方法
2010/03/10 Javascript
jQuery取消ajax请求的方法
2015/06/09 Javascript
JavaScript实现向右伸出的多级网页菜单效果
2015/08/25 Javascript
js+CSS实现模拟华丽的select控件下拉菜单效果
2015/09/01 Javascript
jQuery实现TAB选项卡切换特效简单演示
2016/03/04 Javascript
jquery表单验证插件formValidator使用方法
2016/04/01 Javascript
JS+HTML5手机开发之滚动和惯性缓动实现方法分析
2016/06/12 Javascript
es6中的解构赋值、扩展运算符和rest参数使用详解
2017/09/28 Javascript
Vue CLI3.0中使用jQuery和Bootstrap的方法
2019/02/28 jQuery
jQuery中DOM操作原则实例分析
2019/08/01 jQuery
vscode 远程调试python的方法
2017/12/01 Python
使用apidoc管理RESTful风格Flask项目接口文档方法
2018/02/07 Python
pycharm访问mysql数据库的方法步骤
2019/06/18 Python
Python使用itchat模块实现群聊转发,自动回复功能示例
2019/08/26 Python
pytorch 中的重要模块化接口nn.Module的使用
2020/04/02 Python
Python 实现一行输入多个数字(用空格隔开)
2020/04/29 Python
Python判断远程服务器上Excel文件是否被人打开的方法
2020/07/13 Python
浅谈python处理json和redis hash的坑
2020/07/16 Python
Python3读写ini配置文件的示例
2020/11/06 Python
浅谈html5 video 移动端填坑记
2018/01/15 HTML / CSS
美国克罗格超市在线购物:Kroger
2019/06/21 全球购物
在校生钳工实习自我鉴定
2013/09/19 职场文书
后勤园长自我鉴定
2013/10/17 职场文书
酒店人事专员岗位职责
2013/12/19 职场文书
六年级数学教学反思
2014/02/03 职场文书
企业年度评优方案
2014/06/02 职场文书
庐山导游词
2015/02/03 职场文书
JavaScript实现班级抽签小程序
2021/05/19 Javascript
JavaScript架构搭建前端监控如何采集异常数据
2022/06/25 Javascript
Vue深入理解插槽slot的使用
2022/08/05 Vue.js