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

相关推荐
梨落秋霜10 分钟前
Python入门篇【基础语法】
开发语言·python
ada7_38 分钟前
LeetCode(python)——543.二叉树的直径
数据结构·python·算法·leetcode·职场和发展
小白学大数据43 分钟前
Python 多线程爬取社交媒体品牌反馈数据
开发语言·python·媒体
HAPPY酷1 小时前
压缩文件格式实战速查表 (纯文本版)
python
祝余Eleanor1 小时前
Day 31 类的定义和方法
开发语言·人工智能·python·机器学习
背心2块钱包邮1 小时前
第6节——微积分基本定理(Fundamental Theorem of Calculus,FTC)
人工智能·python·机器学习·matplotlib
larance1 小时前
修改jupyterlab 默认路径
python
别叫我->学废了->lol在线等2 小时前
python单例模式下线程安全优化
python·安全·单例模式
西江649762 小时前
【个人博客系统—测试报告】
python·功能测试·jmeter·pycharm·postman
CHANG_THE_WORLD2 小时前
C++ vs Python 参数传递方式对比
java·c++·python