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开发微信支付的注意事项
Aug 19 Python
Python运维自动化之nginx配置文件对比操作示例
Aug 29 Python
python实现基于信息增益的决策树归纳
Dec 18 Python
python执行精确的小数计算方法
Jan 21 Python
pyqt 实现在Widgets中显示图片和文字的方法
Jun 13 Python
获取django框架orm query执行的sql语句实现方法分析
Jun 20 Python
python实现美团订单推送到测试环境,提供便利操作示例
Aug 09 Python
python2和python3应该学哪个(python3.6与python3.7的选择)
Oct 01 Python
将python安装信息加入注册表的示例
Nov 20 Python
解决Python3.8用pip安装turtle-0.0.2出现错误问题
Feb 11 Python
Python Tkinter Entry和Text的添加与使用详解
Mar 04 Python
django中嵌套的try-except实例
May 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
java EJB 加密与解密原理的一个例子
2008/01/11 PHP
创建数据库php代码 用PHP写出自己的BLOG系统
2010/04/12 PHP
thinkphp3查询mssql数据库乱码解决方法分享
2014/02/11 PHP
Laravel Intervention/image图片处理扩展包的安装、使用与可能遇到的坑详解
2017/11/14 PHP
PHP微商城开源代码实例
2019/03/27 PHP
用JQuery 实现的自定义对话框
2007/03/24 Javascript
JScript 脚本实现文件下载 一般用于下载木马
2009/10/29 Javascript
jQuery Ajax使用实例
2015/04/16 Javascript
jquery获取select选中值的方法分析
2015/12/22 Javascript
jQuery easyui的validatebox校验规则扩展及easyui校验框validatebox用法
2016/01/18 Javascript
在vue-cli的组件模板里使用font-awesome的两种方法
2018/09/28 Javascript
jQuery 常用特效实例小结【显示与隐藏、淡入淡出、滑动、动画等】
2020/05/19 jQuery
Node在Controller层进行数据校验的过程详解
2020/08/28 Javascript
解决await在forEach中不起作用的问题
2021/02/25 Javascript
python使用wxPython打开并播放wav文件的方法
2015/04/24 Python
Python的randrange()方法使用教程
2015/05/15 Python
Python加pyGame实现的简单拼图游戏实例
2015/05/15 Python
Python的IDEL增加清屏功能实例
2017/06/19 Python
python中partial()基础用法说明
2018/12/30 Python
在pycharm中为项目导入anacodna环境的操作方法
2020/02/12 Python
基于打开pycharm有带图片md文件卡死问题的解决
2020/04/24 Python
python统计mysql数据量变化并调用接口告警的示例代码
2020/09/21 Python
Python实现定时监测网站运行状态的示例代码
2020/09/30 Python
python Autopep8实现按PEP8风格自动排版Python代码
2021/03/02 Python
利用CSS3实现炫酷的飞机起飞动画
2016/09/17 HTML / CSS
Gap英国官网:Gap UK
2018/07/18 全球购物
标准化管理实施方案
2014/02/25 职场文书
群众路线教育实践活动批评与自我批评
2014/09/15 职场文书
幼儿教师师德师风自我剖析材料
2014/09/29 职场文书
个人创业事迹材料
2014/12/30 职场文书
工程项目经理岗位职责
2015/02/02 职场文书
小学教师工作总结2015
2015/04/07 职场文书
淘宝文案策划岗位职责
2015/04/14 职场文书
2016年小学党支部创先争优活动总结
2016/04/05 职场文书
MATLAB 如何求取离散点的曲率最大值
2021/04/16 Python
微软Win11有哪些隐藏功能? windows11多个功能汇总
2021/11/21 数码科技