温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

使用Python怎么实现日志无延迟实时写入

发布时间:2021-05-11 18:57:44 来源:亿速云 阅读:331 作者:Leah 栏目:开发技术

使用Python怎么实现日志无延迟实时写入?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

python的五大特点是什么

python的五大特点:1.简单易学,开发程序时,专注的是解决问题,而不是搞明白语言本身。2.面向对象,与其他主要的语言如C++和Java相比, Python以一种非常强大又简单的方式实现面向对象编程。3.可移植性,Python程序无需修改就可以在各种平台上运行。4.解释性,Python语言写的程序不需要编译成二进制代码,可以直接从源代码运行程序。5.开源,Python是 FLOSS(自由/开放源码软件)之一。

以下是查到的解决方案(亲测可行):

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怎么实现日志无延迟实时写入问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注亿速云行业资讯频道了解更多相关知识。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI