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 从远程服务器下载日志文件的程序
Feb 10 Python
python正则表达式抓取成语网站
Nov 20 Python
跟老齐学Python之用while来循环
Oct 02 Python
Python中的字符串替换操作示例
Jun 27 Python
Python的爬虫框架scrapy用21行代码写一个爬虫
Apr 24 Python
python安装numpy&安装matplotlib& scipy的教程
Nov 02 Python
同时安装Python2 & Python3 cmd下版本自由选择的方法
Dec 09 Python
使用Python对微信好友进行数据分析
Jun 27 Python
Django利用cookie保存用户登录信息的简单实现方法
May 27 Python
Python监控服务器实用工具psutil使用解析
Dec 19 Python
基于Python脚本实现邮件报警功能
May 20 Python
Python自动化办公Excel模块openpyxl原理及用法解析
Nov 05 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
20个2014年最优秀的PHP框架回顾
2014/10/22 PHP
Zend Framework教程之Bootstrap类用法概述
2016/03/14 PHP
微信网页授权(OAuth2.0) PHP 源码简单实现
2016/08/29 PHP
PHP array_shift()用法实例分析
2019/01/07 PHP
Laravel5.4框架使用socialite实现github登录的方法
2019/03/20 PHP
JQuery实现自定义对话框的代码
2008/06/15 Javascript
Extjs4 GridPanel的主要配置参数详细介绍
2013/04/18 Javascript
jquery prop的使用介绍及与attr的区别
2013/12/19 Javascript
jquery实现的网页自动播放声音
2014/04/30 Javascript
javascript判断css3动画结束 css3动画结束的回调函数
2015/03/10 Javascript
jquery实现网站列表切换效果的2种方法
2016/08/12 Javascript
javascript中的面向对象
2017/03/30 Javascript
js仿微信公众平台打标签功能
2017/04/08 Javascript
浅析Angular2子模块以及异步加载
2017/04/24 Javascript
Bootstrap输入框组件使用详解
2017/06/09 Javascript
JS实现将二维数组转为json格式字符串操作示例
2018/07/12 Javascript
在vue中使用setInterval的方法示例
2019/04/16 Javascript
react实现antd线上主题动态切换功能
2019/08/12 Javascript
小程序实现列表倒计时功能
2021/01/29 Javascript
python 异常处理总结
2016/10/18 Python
python3实现钉钉消息推送的方法示例
2019/03/14 Python
利用Python绘制Jazz网络图的例子
2019/11/21 Python
python实现按关键字筛选日志文件
2019/12/24 Python
python 图像的离散傅立叶变换实例
2020/01/02 Python
Python基于pyjnius库实现访问java类
2020/07/31 Python
html5使用canvas绘制文字特效
2014/12/15 HTML / CSS
百思买美国官网:Best Buy
2016/07/28 全球购物
捷克时尚网上商店:OTTO
2018/03/15 全球购物
请问如下代码执行后a和b的值分别是什么
2016/05/05 面试题
VLAN和VPN有什么区别?分别实现在OSI的第几层?
2014/12/23 面试题
化妆品促销方案
2014/02/24 职场文书
大学生求职计划书
2014/04/30 职场文书
2014法制宣传日活动总结范文
2014/11/01 职场文书
2015年建筑工作总结报告
2015/05/04 职场文书
springboot中rabbitmq实现消息可靠性机制详解
2021/09/25 Java/Android
Nginx安装配置详解
2022/06/25 Servers