python获取iOS最近业务日志的两种方法

当iOS UI自动化用例执行失败的时候,需要获取当时的业务日志,供后续分析使用。

现在已经把iOS沙盒目录挂载到本地,剩下的事情就是从沙盒目录中捞取当前的日志,沙盒中的日志文件较大,整体导出来也可以,但是会有些无用的日志,最好是能获取到UI自动化执行失败时,当时的日志,因为那时日志已经打印到日志文件中,只需捞取一定量的日志即可,可供精准分析。

有两种方法,一种实现较简单,一种稍复杂些

python 复制代码
from collections import deque


def get_last_lines_from_file(file_path, num_lines):
    with open(file_path, 'r') as file:
        last_lines = deque(file, maxlen=num_lines)
    return list(last_lines)

这个方法适用于从较小到中等大小的日志文件中捞取日志。

python 复制代码
def get_last_lines_from_file_by_file_offset_mode(file_path, num_lines):
    """
    使用文件偏移量方式获取日志
    :param file_path:日志文件路径
    :param num_lines:行数
    :return:
    """
    if not os.path.isfile(file_path):
        print(f"日志文件不存在:{file_path}")
        return []

    with open(file_path, 'rb') as file:
        file.seek(0, 2)
        file_size = file.tell()

        lines_found = []
        buffer = bytearray()

        while len(lines_found) <= num_lines and file_size > 0:
            file_size -= 1
            file.seek(file_size)
            byte = file.read(1)
            buffer.extend(byte)

            if byte == b'\n':
                line = buffer[::-1].decode(errors='ignore').strip()
                lines_found.append(line + '\n')
                buffer = bytearray()

        # 当文件内容小于指定的行数是执行到这里,这行是最顶部的那一行
        if buffer:
            line = buffer[::-1].decode(errors='ignore').strip()
            lines_found.append(line)

    return list(reversed(lines_found))

这个方法是从文件末尾向前读取,适合更大的文件,因为不会将整个文件读入内存。

在调试这个方法的时候遇到了一些问题,刚开始用的是:

if buffer[0:1] == b'\n':

lines_found.append(buffer[::-1].decode(errors='ignore').strip())

buffer = bytearray()

但是结果是捞取了全部的日志内容,并不是我指定的最新的1000行。

这时打印 lines_found 的长度一直是1,并不是期望的递增,说明buffer 中的数据没有被正确地切分为行,这段代码没有被执行到。

所以调整了判断条件,每次读取一个字节(file.read(1))并检查 byte == b'\n'。如果检测到换行符,表示找到一行,将 buffer 中的内容翻转解码并添加到 lines_found 列表。

相关推荐
程序员爱钓鱼3 小时前
Python 综合项目实战:学生成绩管理系统(命令行版)
后端·python·ipython
Brsentibi3 小时前
基于python代码自动生成关于建筑安全检测的报告
python·microsoft
程序员爱钓鱼3 小时前
REST API 与前后端交互:让应用真正跑起来
后端·python·ipython
gCode Teacher 格码致知5 小时前
Python基础教学:Python的openpyxl和python-docx模块结合Excel和Word模板进行数据写入-由Deepseek产生
python·excel
Destiny_where7 小时前
Agent平台-RAGFlow(2)-源码安装
python·ai
molunnnn7 小时前
第四章 Agent的几种经典范式
开发语言·python
linuxxx1109 小时前
django测试缓存命令的解读
python·缓存·django
毕设源码-邱学长10 小时前
【开题答辩全过程】以 基于Python的Bilibili平台数据分析与可视化实现为例,包含答辩的问题和答案
开发语言·python·数据分析
咚咚王者10 小时前
人工智能之编程进阶 Python高级:第十一章 过渡项目
开发语言·人工智能·python