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 列表。

相关推荐
诚信爱国敬业友善2 分钟前
GUI编程(window系统→Linux系统)
linux·python·gui
查理零世18 分钟前
【蓝桥杯集训·每日一题2025】 AcWing 6134. 哞叫时间II python
python·算法·蓝桥杯
紫雾凌寒28 分钟前
解锁机器学习核心算法|神经网络:AI 领域的 “超级引擎”
人工智能·python·神经网络·算法·机器学习·卷积神经网络
sun lover40 分钟前
conda简单命令
python·conda
Mike_188702783511 小时前
1688代采下单API接口使用指南:实现商品采集与自动化下单
前端·python·自动化
青铜念诗1 小时前
python脚本文件设置进程优先级(在.py文件中实现)
开发语言·python
Dyan_csdn2 小时前
【Python项目】文本相似度计算系统
开发语言·python
pianmian12 小时前
python绘图之回归拟合图
开发语言·python·回归
MiyamiKK572 小时前
leetcode_位运算 190.颠倒二进制位
python·算法·leetcode
伊一线天2 小时前
体验用ai做了个python小游戏
人工智能·python·pygame