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实现查找两个字符串中相同字符并输出的方法
Jul 11 Python
KMP算法精解及其Python版的代码示例
Jun 01 Python
python发送邮件功能实现代码
Jul 15 Python
Python使用django搭建web开发环境
Jun 09 Python
Python中if elif else及缩进的使用简述
May 31 Python
对python借助百度云API对评论进行观点抽取的方法详解
Feb 21 Python
在Python中等距取出一个数组其中n个数的实现方式
Nov 27 Python
使用Python和百度语音识别生成视频字幕的实现
Apr 09 Python
Python定时任务框架APScheduler原理及常用代码
Oct 05 Python
Selenium 安装和简单使用的实现
Dec 04 Python
Python源码解析之List
May 21 Python
Python写情书? 10行代码展示如何把情书写在她的照片里
Apr 21 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分页思路以及在ZF中的使用
2012/05/30 PHP
将word转化为swf 如同百度文库般阅读实现思路及代码
2013/08/09 PHP
ThinkPHP在新浪SAE平台的部署实例
2014/10/31 PHP
Symfony2中被遗弃的getRequest()方法分析
2016/03/17 PHP
Yii2简单实现多语言配置的方法
2016/07/23 PHP
php获取excel文件数据
2017/04/21 PHP
PHP实现倒计时功能
2020/11/16 PHP
用javascript动态调整iframe高度的方法
2007/03/06 Javascript
Jquery中dialog属性小记
2010/09/03 Javascript
jQuery+CSS 实现随滚动条增减的汽水瓶中的液体效果
2011/09/26 Javascript
在子窗口中关闭父窗口的一句代码
2013/10/21 Javascript
js代码实现点击按钮出现60秒倒计时
2021/01/28 Javascript
微信小程序 火车票查询实例讲解
2016/10/17 Javascript
vue.js指令v-model实现方法
2016/12/05 Javascript
Javascript中字符串和数字的操作方法整理
2017/01/22 Javascript
Nodejs中使用phantom将html转为pdf或图片格式的方法
2017/09/18 NodeJs
前端把html表格生成为excel表格的实例
2017/09/19 Javascript
基于Vue2.X的路由和钩子函数详解
2018/02/09 Javascript
Python学习笔记(一)(基础入门之环境搭建)
2014/06/05 Python
python实现根据窗口标题调用窗口的方法
2015/03/13 Python
基于python实现学生管理系统
2018/10/17 Python
详解Numpy数组转置的三种方法T、transpose、swapaxes
2019/05/27 Python
使用 Django Highcharts 实现数据可视化过程解析
2019/07/31 Python
Python如何使用bokeh包和geojson数据绘制地图
2020/03/21 Python
Python3通过chmod修改目录或文件权限的方法示例
2020/06/08 Python
pandas.DataFrame.drop_duplicates 用法介绍
2020/07/06 Python
pip install命令安装扩展库整理
2021/03/02 Python
丝芙兰新加坡官网:Sephora新加坡
2018/12/04 全球购物
Hotels.com印度:酒店预订
2019/05/11 全球购物
致跳远运动员广播稿
2014/02/11 职场文书
材料专业毕业生求职信
2014/02/26 职场文书
测量员岗位职责
2015/02/14 职场文书
内勤岗位职责范本
2015/04/13 职场文书
病危通知书样本
2015/04/17 职场文书
Python利用capstone实现反汇编
2022/04/06 Python
Python matplotlib绘制雷达图
2022/04/13 Python