Python 远程抓取服务器日志最后 1000行
哈喽,大家好,我是木头左!
一、神奇的 Python 工具箱
1. SSH 连接的密钥——paramiko
paramiko 库提供了丰富的方法来处理 SSH 连接的各种细节。从创建连接对象,到执行远程命令,再到获取命令输出,它都能有条不紊地完成任务。例如,可以使用 paramiko.SSHClient() 来创建一个 SSH 客户端实例,然后通过 connect() 方法传入服务器的 IP 地址、用户名和密码等信息,就能成功建立连接。一旦连接建立,就可以使用 exec_command() 方法在远程服务器上执行各种命令,就像在本地终端输入命令一样自然。
2. 文本处理的利器——内置函数和方法
Python 本身就拥有许多强大的文本处理功能,这在截取日志文件特定行数的操作中起着关键作用。比如,字符串的分割方法 split() 可以将一行文本按照指定的分隔符拆分成多个部分;列表的切片操作 [start:end] 可以方便地获取列表中的一段元素,这在截取日志文件的最后 n 行时会大显身手。
此外,文件操作相关的函数如 open()、read()、write() 等也是实现目标的重要帮手。通过这些函数,可以打开本地和远程的文件,读取其中的内容,并将处理后的数据写入新的文件中。
二、踏上远程连接的征程
1. 搭建 SSH 桥梁
要用 paramiko 搭建起与远程服务器的 SSH 连接。下面是一段简洁而有效的代码示例:
import paramikodef create_ssh_connection(hostname, port, username, password):client = paramiko.SSHClient()client.set_missing_host_key_policy(paramiko.AutoAddPolicy())client.connect(hostname, port, username, password)return clienthostname = 'your_server_ip'
port = 22
username = 'your_username'
password = 'your_password'
ssh_client = create_ssh_connection(hostname, port, username, password)
在这段代码中,定义了一个名为 create_ssh_connection 的函数,它接收服务器的 IP 地址、端口号、用户名和密码作为参数,并返回一个 SSH 客户端对象。通过调用这个函数,可以轻松地与远程服务器建立连接。需要注意的是,为了简化示例,这里采用了明文存储密码的方式,但在实际应用中,应该使用更安全的方式来管理密码,如环境变量或加密存储。
三、深入日志文件的迷宫
经过一番努力,终于成功地与远程服务器建立了连接,现在是时候深入服务器的文件系统,找到那个神秘的 /home/test.log 日志文件了。这就像是进入了一个充满宝藏的迷宫,需要准确地找到目标所在的房间。
1. 定位日志文件
在服务器的文件系统中,日志文件通常存放在特定的目录下。对于 /home/test.log 这个文件,它位于用户的主目录下的 test.log 文件中。可以使用 SSH 客户端提供的 exec_command() 方法来执行 Linux 系统的命令,从而找到并查看这个文件的内容。
以下是一个简单的代码片段,用于检查日志文件是否存在:
def check_file_exists(ssh_client, filepath):stdin, stdout, stderr = ssh_client.exec_command(f'ls {filepath}')if stdout.channel.recv_exit_status() == 0:return Trueelse:return Falsefilepath = '/home/test.log'
if check_file_exists(ssh_client, filepath):print("日志文件存在")
else:print("日志文件不存在")
在这段代码中,定义了一个 check_file_exists 函数,它接收 SSH 客户端对象和文件路径作为参数。通过执行 ls 命令并检查命令的退出状态,可以判断文件是否存在。如果文件存在,函数返回 True,否则返回 False。
2. 揭开日志文件
一种常见的方法是使用 Linux 系统的 tail 命令。tail 命令可以方便地显示文件的末尾部分内容。可以结合 Python 的 exec_command() 方法和 tail 命令来实现这一功能:
def get_last_n_lines(ssh_client, filepath, n):command = f'tail -n {n} {filepath}'stdin, stdout, stderr = shh_client.exec_command(command)lines = stdout.read().decode('utf-8').splitlines()return linesn = 100
lines = get_last_n_lines(ssh_client, filepath, n)
for line in lines:print(line)
在这段代码中,定义了 get_last_n_lines 函数,它接收 SSH 客户端对象、文件路径和要截取的行数 n 作为参数。通过构建 tail 命令并执行它,可以获取日志文件的最后 n 行内容,并将其作为一个字符串列表返回。然后,可以遍历这个列表,打印出每一行的内容。
四、将宝藏带回本地——下载日志文件
现在,已经成功地从远程服务器上截取了 /home/test.log 文件的最后 n 行内容,接下来就是将这些珍贵的“宝藏”下载到本地的 tesg.log 文件中了。
1. 搭建传输通道
要将远程服务器上的数据下载到本地,需要建立一个数据传输通道。在 Python 中,可以使用文件 I/O 操作来实现这一功能。在本地创建一个名为 tesg.log 的文件,并打开它准备写入数据。
以下是创建本地文件并打开它的代码示例:
local_filename = 'tesg.log'
with open(local_filename, 'w') as local_file:pass
在这段代码中,使用 open() 函数以写入模式(‘w’)打开或创建一个名为 tesg.log 的文件,并将文件对象赋值给 local_file 变量。这样,就可以通过这个文件对象将数据写入本地文件中了。
2. 传输数据的魔法时刻
有了本地文件和从远程服务器获取的数据,现在就可以开始数据传输了。将之前获取的日志文件最后 n 行的内容逐行写入本地文件中。
下面是完成数据传输的代码片段:
for line in lines:local_file.write(line + '
')
在这段代码中,遍历从远程服务器获取的每一行数据,并使用 write() 方法将其写入本地文件中。为了确保每行数据之间有正确的换行符,在每行数据后面添加了一个换行符 ' '。
五、关闭连接与清理工作
1. 关闭 SSH 连接的大门
在使用完 SSH 客户端后,应该及时关闭与远程服务器的连接,以释放系统资源并确保安全。这就好比是在离开一座房子后要锁好门一样重要。
关闭 SSH 连接非常简单,只需要调用 SSH 客户端对象的 close() 方法即可:
ssh_client.close()
2. 清理临时文件与资源
在本地,创建了 tesg.log 文件用于存储下载的日志数据。如果在后续的处理过程中不再需要这个文件,可以将其删除以释放磁盘空间。同样,在远程服务器上,如果在操作过程中产生了一些临时文件或数据,也应该及时清理掉,以保持服务器环境的整洁。
在 Python 中,可以使用 os.remove() 函数来删除本地文件:
import osos.remove(local_filename)
通过以上步骤,成功地实现了从服务器远程截取 /home/test.log 文件的最后 n 行并下载到本地 tesg.log 文件中的功能。
我是木头左,感谢各位童鞋的点赞、收藏,我们下期更精彩!

相关文章:
Python 远程抓取服务器日志最后 1000行
哈喽,大家好,我是木头左! 一、神奇的 Python 工具箱 1. SSH 连接的密钥——paramiko paramiko 库提供了丰富的方法来处理 SSH 连接的各种细节。从创建连接对象,到执行远程命令,再到获取命令输出,它都能有…...
vue3+screenfull实现部分页面全屏(遇到的问题会持续更新)
需求:除了左侧菜单,右侧主体部分全部全屏 首先下载screenfull全屏插件 npm install screenfull --save页面引入 import screenfull from screenfull;我这里是右上角全屏图标 <el-iconref"elIconRef"color"#ffffff"size"2…...
Ubuntu 下 nginx-1.24.0 源码分析 (1)
main 函数在 src\core\nginx.c int ngx_cdecl main(int argc, char *const *argv) {ngx_buf_t *b;ngx_log_t *log;ngx_uint_t i;ngx_cycle_t *cycle, init_cycle;ngx_conf_dump_t *cd;ngx_core_conf_t *ccf;ngx_debug_init(); 进入 main 函数 最…...
2025数据存储技术风向标:解析数据湖与数据仓库的实战效能差距
一、技术演进的十字路口 当前全球数据量正以每年65%的复合增长率激增,IDC预测到2027年企业将面临日均处理500TB数据的挑战。在这样的背景下,传统数据仓库与新兴数据湖的博弈进入白热化阶段。Gartner最新报告显示,采用混合架构的企业数据运营效…...
探索高性能AI识别和边缘计算 | NVIDIA Jetson Orin Nano 8GB 开发套件的全面测评
随着边缘计算和人工智能技术的迅速发展,性能强大的嵌入式AI开发板成为开发者和企业关注的焦点。NVIDIA近期推出的Jetson Orin Nano 8GB开发套件,凭借其40 TOPS算力、高效的Ampere架构GPU以及出色的边缘AI能力,引起了广泛关注。本文将从配置性…...
数据结构 常见的排序算法
🌻个人主页:路飞雪吖~ 🌠专栏:数据结构 目录 🌻个人主页:路飞雪吖~ 一、插入排序 🌟直接插入排序 🌟希尔排序 二、选择排序 🌟选择排序 🌟堆排序…...
ES索引知识
索引是数据的载体,存储了文档和映射的信息 索引是具有相同结构的文档的合集体。 设置索引,不仅仅是设置索引名字,还有索引的一些配置,比如:分片和副本,刷新频率,搜索结果的最大参数,…...
FreeRTOS第17篇:FreeRTOS链表实现细节05_MiniListItem_t:FreeRTOS内存优化
文/指尖动听知识库-星愿 文章为付费内容,商业行为,禁止私自转载及抄袭,违者必究!!! 文章专栏:深入FreeRTOS内核:从原理到实战的嵌入式开发指南 1 为什么需要迷你列表项? 在嵌入式系统中,内存资源极其宝贵。FreeRTOS为满足不同场景需求,设计了标准列表项(ListItem_…...
Golang | Gin(简洁版)
文章目录 安装使用RESTful API响应页面获取请求参数路由讲解中间件 安装使用 Gin 是一个 golang 的微框架,封装比较优雅,API 友好,源代码比较明确。具有快速灵活,容错方便等特点。其实对于 golang 而言,web 框架的依赖…...
RAG外挂知识库
目录 RAG的工作流程 python实现RAG 1.引入相关库及相关准备工作 函数 1. 加载并读取文档 2. 文档分割 3. embedding 4. 向集合中添加文档 5. 用户输入内容 6. 查询集合中的文档 7. 构建Prompt并生成答案 主流程 附录 函数解释 1. open() 函数语法 2.client.embe…...
Rust语言:开启高效编程之旅
目录 一、Rust 语言初相识 二、Rust 语言的独特魅力 2.1 内存安全:消除隐患的护盾 2.2 高性能:与 C/C++ 并肩的实力 2.3 强大的并发性:多线程编程的利器 2.4 跨平台性:适配多环境的优势 三、快速上手 Rust 3.1 环境搭建:为开发做准备 3.2 第一个 R…...
蓝桥杯备考:图论初解
1:图的定义 我们学了线性表和树的结构,那什么是图呢? 线性表是一个串一个是一对一的结构 树是一对多的,每个结点可以有多个孩子,但只能有一个父亲 而我们今天学的图!就是多对多的结构了 V表示的是图的顶点集…...
Codeforces Round 502 E. The Supersonic Rocket 凸包、kmp
题目链接 题目大意 平面上给定两个点集,判定两个点集分别形成的凸多边形能否通过旋转、平移重合。 点集大小 ≤ \leq ≤ 1 0 5 10^{5} 105,坐标范围 [0, 1 0 8 10^{8} 108 ]. 思路 题意很明显,先求出凸包再判断两凸包是否同构。这里用…...
机器人匹诺曹机制,真话假话平衡机制
摘要: 本文聚焦于机器人所采用的一种“匹诺曹机制”,该机制旨在以大概率保持“虚拟鼻子”(一种象征虚假程度的概念)不会过长,通过在对话中夹杂真话与假话来实现。文章深入探讨了这一机制的原理,分析其背后的…...
用Python分割并高效处理PDF大文件
在处理大型PDF文件时,将它们分解成更小、更易于管理的块通常是有益的。这个过程称为分区,它可以提高处理效率,并使分析或操作文档变得更容易。在本文中,我们将讨论如何使用Python和为Unstructured.io库将PDF文件划分为更小的部分。…...
【RAG】混合检索(Hybrid Search) 提高检索精度
1.问题:向量检索也易混淆,而关键字会更精准 在实际生产中,传统的关键字检索(稀疏表示)与向量检索(稠密表示)各有利弊。 举个具体例子,比如文档中包含很长的专有名词, 关…...
CTFHub-FastCGI协议/Redis协议
将木马进行base64编码 <?php eval($_GET[cmd]);?> 打开kali虚拟机,使用虚拟机中Gopherus-master工具 Gopherus-master工具安装 git clone https://github.com/tarunkant/Gopherus.git 进入工具目录 cd Gopherus 使用工具 python2 "位置" --expl…...
【算法day4】最长回文子串——动态规划方法
最长回文子串 给你一个字符串 s,找到 s 中最长的 回文 子串。 https://leetcode.cn/problems/longest-palindromic-substring/submissions/607962358/ 动态规划: 回文串即是从前面开始读和从后面开始读,读出来的字符串均相同的字符串&#…...
C++之“string”类的模拟实现
🌹个人主页🌹:喜欢草莓熊的bear 🌹专栏🌹:C入门 前言 hello ,大家又来跟着bear学习了。一起奔向更好的自己,上篇博客已经讲清楚了string的一些功能的使用。我们就实现一些主要的功…...
请谈谈 HTTP 中的安全策略,如何防范常见的Web攻击(如XSS、CSRF)?
一、Web安全核心防御机制 (一)XSS攻击防御(跨站脚本攻击) 1. 原理与分类 存储型XSS:恶意脚本被持久化存储在服务端(如数据库)反射型XSS:脚本通过URL参数或表单提交触发执行…...
AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...
如何在看板中有效管理突发紧急任务
在看板中有效管理突发紧急任务需要:设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP(Work-in-Progress)弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中,设立专门的紧急任务通道尤为重要,这能…...
DBAPI如何优雅的获取单条数据
API如何优雅的获取单条数据 案例一 对于查询类API,查询的是单条数据,比如根据主键ID查询用户信息,sql如下: select id, name, age from user where id #{id}API默认返回的数据格式是多条的,如下: {&qu…...
WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成
厌倦手动写WordPress文章?AI自动生成,效率提升10倍! 支持多语言、自动配图、定时发布,让内容创作更轻松! AI内容生成 → 不想每天写文章?AI一键生成高质量内容!多语言支持 → 跨境电商必备&am…...
JDK 17 新特性
#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持,不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的ÿ…...
Golang——6、指针和结构体
指针和结构体 1、指针1.1、指针地址和指针类型1.2、指针取值1.3、new和make 2、结构体2.1、type关键字的使用2.2、结构体的定义和初始化2.3、结构体方法和接收者2.4、给任意类型添加方法2.5、结构体的匿名字段2.6、嵌套结构体2.7、嵌套匿名结构体2.8、结构体的继承 3、结构体与…...
实战三:开发网页端界面完成黑白视频转为彩色视频
一、需求描述 设计一个简单的视频上色应用,用户可以通过网页界面上传黑白视频,系统会自动将其转换为彩色视频。整个过程对用户来说非常简单直观,不需要了解技术细节。 效果图 二、实现思路 总体思路: 用户通过Gradio界面上…...
前端高频面试题2:浏览器/计算机网络
本专栏相关链接 前端高频面试题1:HTML/CSS 前端高频面试题2:浏览器/计算机网络 前端高频面试题3:JavaScript 1.什么是强缓存、协商缓存? 强缓存: 当浏览器请求资源时,首先检查本地缓存是否命中。如果命…...
聚六亚甲基单胍盐酸盐市场深度解析:现状、挑战与机遇
根据 QYResearch 发布的市场报告显示,全球市场规模预计在 2031 年达到 9848 万美元,2025 - 2031 年期间年复合增长率(CAGR)为 3.7%。在竞争格局上,市场集中度较高,2024 年全球前十强厂商占据约 74.0% 的市场…...
FOPLP vs CoWoS
以下是 FOPLP(Fan-out panel-level packaging 扇出型面板级封装)与 CoWoS(Chip on Wafer on Substrate)两种先进封装技术的详细对比分析,涵盖技术原理、性能、成本、应用场景及市场趋势等维度: 一、技术原…...
