0

0

Python怎么读取日志文件_尾部持续读取类似tail -f实现

P粉602998670

P粉602998670

发布时间:2026-03-11 18:17:03

|

814人浏览过

|

来源于php中文网

原创

最稳妥方案是用watchdog库监听目录,结合文件名模式与修改时间动态切换读取目标,并用缓冲区拼接跨readline的多行日志。

python怎么读取日志文件_尾部持续读取类似tail -f实现

time.sleep() 轮询文件末尾是最简单但要注意 CPU 占用

Python 没有内置的阻塞式“tail -f”等价物,最直接的做法是循环检查文件大小变化,读新内容。核心逻辑就是:记录上次读到的位置 → 等待 → 检查文件是否增长 → 从上次位置读新增行。

常见错误现象:time.sleep(0.1) 太小导致频繁唤醒、CPU 占用高;sleep(5) 太大导致日志延迟明显;没处理文件被 logrotate 清空或重命名的情况,导致漏读或报错。

  • 推荐起始值用 time.sleep(0.5),再根据实际吞吐量调整
  • 每次读之前先 os.stat(filepath).st_size 获取当前大小,比直接 seek(0, 2) 更可靠
  • 如果日志可能被轮转(比如 app.logapp.log.1),仅靠文件大小不够,得加 os.path.getinode() 判断是否还是同一个文件

select.poll() 监听文件描述符在 Linux 上更高效但不跨平台

Linux 下可以对普通文件 fd 使用 select.poll(),配合 IN_MODIFY 事件实现近似 inotify 的效果——不过注意:普通文件不触发 IN_MODIFY,只有某些特殊文件系统(如 procfs)或内核版本较新时才可能生效。多数情况下它只对管道、socket、终端有效,对磁盘日志文件基本无效。

所以别被网上某些示例误导:用 poll().register(fd, select.POLLIN) 去监听日志文件,大概率会一直阻塞或立刻返回无事件。

立即学习Python免费学习笔记(深入)”;

银河易创
银河易创

一站式AIGC创作平台,集成GPT-3.5、GPT-4、文心一言等对话模型、Midjourney、DallE等绘画工具、AI音乐、AI视频和AI PPT等功能!

下载
  • 真正可用的替代方案是用 inotify(需安装 pyinotify)或 watchdog 库监听目录变更
  • watchdogFileSystemEventHandler.on_modified() 可捕获文件内容变化,但注意它不保证“内容已刷盘”,可能读到半截行
  • 若坚持用底层机制,inotifyIN_MOVED_TO + IN_CREATE 才能可靠捕获 logrotate 场景

watchdog 库处理轮转和多行日志更稳妥

真实生产环境里,日志文件几乎一定会被轮转、压缩、重命名。这时候只盯着一个文件名读,很容易断档。用 watchdog 可以监听整个目录,结合文件名模式(如 *.log)和修改时间,主动发现新文件并续读。

使用场景:你不能假设日志永远写在 app.log,而要接受它可能是 app.log.2024-06-15 或刚被 rename 出来的 app.log

  • 初始化时先按时间排序找到最新日志文件,从末尾开始读(用 file.seek(0, 2)
  • 监听 on_createdon_moved,当检测到新文件或旧文件被移走,立即切换读取目标
  • 每行日志可能跨多个 readline() 调用(尤其 JSON 日志含换行符),建议用缓冲区拼接,直到遇到完整换行再解析
  • 注意 watchdog 默认用 inotify,不支持 macOS 或 Windows 的原生事件,跨平台需配 Observer 的不同 backend

subprocess.Popen 调用系统 tail -f 是最省事的兜底方案

如果你只需要“把 tail -f 的输出拿进 Python 处理”,而不是非得纯 Python 实现,那直接调用系统命令反而最稳——它天然支持符号链接更新、文件轮转重开、信号中断等 edge case。

性能影响很小,因为只是做一层管道桥接;兼容性上,只要系统有 tail(Linux/macOS 都自带),就不用操心内核版本或文件系统限制。

  • 启动时加 stdout=subprocess.PIPE, stderr=subprocess.STDOUT, bufsize=1, universal_newlines=True
  • for line in iter(proc.stdout.readline, ''): 流式读取,避免阻塞
  • 别忘了处理子进程异常退出:比如 tail 被 kill、文件被删导致 OSError: [Errno 5] Input/output error
  • Windows 下没有 tail,可改用 Get-Content -Wait(PowerShell),但需注意编码和换行符差异

真正难的不是“怎么读最后一行”,而是“怎么确认这行确实写完了、没被截断、没被轮转跳过”。轮转时机、缓冲策略、编码边界、权限变化,任何一个环节松动都会导致日志丢失或重复。别迷信某一种方法能通吃所有部署环境。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

455

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

546

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

334

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

82

2025.09.10

edge是什么浏览器
edge是什么浏览器

Edge是一款由Microsoft开发的网页浏览器,是Windows 10操作系统中默认的浏览器,其目标是提供更快、更安全、更现代化的浏览器体验。本专题为大家提供edge浏览器相关的文章、下载、课程内容,供大家免费下载体验。

1724

2023.08.21

IE浏览器自动跳转EDGE如何恢复
IE浏览器自动跳转EDGE如何恢复

ie浏览器自动跳转edge的解决办法:1、更改默认浏览器设置;2、阻止edge浏览器的自动跳转;3、更改超链接的默认打开方式;4、禁用“快速网页查看器”;5、卸载edge浏览器;6、检查第三方插件或应用程序等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

397

2024.03.05

如何解决Edge打开但没有标题的问题
如何解决Edge打开但没有标题的问题

若 Microsoft Edge 浏览器打开后无标题(窗口空白或标题栏缺失),可尝试以下方法解决: 重启 Edge:关闭所有窗口,重新启动浏览器。 重置窗口布局:右击任务栏 Edge 图标 → 选择「最大化」或「还原」。 禁用扩展:进入 edge://extensions 临时关闭插件测试。 重置浏览器设置:前往 edge://settings/reset 恢复默认配置。 更新或重装 Edge:检查最新版本,或通过控制面板修复

1034

2025.04.24

scripterror怎么解决
scripterror怎么解决

scripterror的解决办法有检查语法、文件路径、检查网络连接、浏览器兼容性、使用try-catch语句、使用开发者工具进行调试、更新浏览器和JavaScript库或寻求专业帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

492

2023.10.18

C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

3

2026.03.11

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 22.5万人学习

Django 教程
Django 教程

共28课时 | 4.9万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号