python代码中通过pymobiledevice3访问iOS沙盒目录获取app日志
【背景】
在进行业务操作过程中,即在app上的一些操作,在日志中会有对应的节点,例如,下面是查看设备实时视频过程对应的一些关键节点:
1、TxDeviceAwakeLogicHelper:wakeStart deviceId = CxD2BA11000xxxx
2、TxDeviceAwakeLogicHelper:awake send success
3、TxDeviceAwakeLogicHelper:awake success onDpUpdate deviceId = CxD2BA11000xxxx key = 1x9 value = 1 tempSuccess = false self = <xxxx.TxDeviceAwakeLogicHelper: 0x287bd81c0>
4、TXLivePlayer:p2pStart deviceId = CxD2BA11000xxxx
5、TXLivePlayer:CxD2BA11000xxxxconnect Succ
6、TXLivePlayer:p2pEnd deviceId = CxD2BA11000xxxx)
7、TXLivePlayer:previewStart deviceId = CxD2BA11000xxxx
8、TXLivePlayer:previewSuccess deviceId = CxD2BA11000xxxx
9、XxxxCameraLogicModel:XxxxCameraLogicModel-Playing = PlayState(rawValue: 1) ID = CxD2BA11000xxxx
10、TxPreviewCenter:stopPreview, deviceId=CxD2BA11000xxxx
11、TxCameraCenter:destroy finish
12、TXLivePlayerViewController:didStopPlay
13、XxxxCameraLogicModel:XxxxCameraLogicModel-!Playing = PlayState(rawValue: 4) ID = CxD2BA11000xxxx
【代码实现】
以实现捕获awake success onDpUpdate deviceId = CxD2BA11000xxxx,为例:
1、
def get_dev_play_state():command1 = subprocess.Popen(['pymobiledevice3', 'apps', 'afc', 'com.gxxxxxx.ios'], stdout=subprocess.PIPE, text=True)command2 = subprocess.run(['cat', 'Documents/Logs/gxxxxxx_app_ios_20241025.log', '|', 'grep', '-e', '"awake success.*deviceId = CxL2xx11000xxxx"'], stdin=command1.stdout, stdout=subprocess.PIPE, text=True)print(command2.stdout)
上面的代码不能进入xonsh-afc并且保留在shell中继续执行后学的cat命令,得到的结果是:No such file or directory
2、
def get_dev_play_state():result = subprocess.run('pymobiledevice3 apps afc com.gxxxxxx.ios && cat Documents/Logs/gxxxxxx_app_ios_20241025.log | grep -e "awake success.*deviceId = CxL2xx11000xxx"', shell=True, stdout=subprocess.PIPE, text=True)print(result.stdout)
执行上面代码后,一直没有结果返回,一直在运行状态
3、
使用 expect 模拟交互,在进入 xonsh-afc 环境后,通过 pexpect 来执行 grep 命令,在调试过程中执行:process = pexpect.spawn('/bin/zsh'),报错:
/Users/testmanzhang/PycharmProjects/practiceUICatalog/.venv/bin/python /Users/testmanzhang/PycharmProjects/practiceUICatalog/interact_with_phone.py ls (eval):39: command not found: compdef
查了一下资料,compdef 错误提示通常与 Zsh 的自动补全功能有关,可能是因为在执行 pexpect.spawn('/bin/zsh') 时,加载了某些与自动补全相关的配置文件(如 .zshrc 或 .zprofile),其中包含 compdef 配置,但 pexpect 的执行环境无法正确解析或运行这些命令。
所以添加了‘--no-rcs’:
process = pexpect.spawn('/bin/zsh', ['--no-rcs'])
--no-rcs:该选项告诉 Zsh 在启动时不要加载用户的 .zshrc 等配置文件,避免与自动补全和其他不必要的插件产生冲突。
def get_dev_play_state():process = pexpect.spawn('/bin/zsh', ['--no-rcs'])process.expect([pexpect.EOF, pexpect.TIMEOUT, 'testmanzxxxx@TestMandeMBP ~ % '])process.sendline('pymobiledevice3 apps afc com.gxxxxxx.ios')process.expect([pexpect.EOF, pexpect.TIMEOUT, '[com.apple.mobile.house_arrest:/]$'])process.sendline(f'cat Documents/Logs/gxxxxxx_app_ios_20241025.log | grep -e "awake success.*deviceId = CxL2xx11000xxxx"')process.expect([pexpect.EOF, pexpect.TIMEOUT])print(process.before.decode('utf-8'))process.sendline('exit')process.close()
通过上面的代码可以实现程序跟iOS设备的交互,并分析app沙盒中的业务日志,返回想要的信息。
我这边业务得到的结果是这样的:
相关文章:
python代码中通过pymobiledevice3访问iOS沙盒目录获取app日志
【背景】 在进行业务操作过程中,即在app上的一些操作,在日志中会有对应的节点,例如,下面是查看设备实时视频过程对应的一些关键节点: 1、TxDeviceAwakeLogicHelper:wakeStart deviceId CxD2BA11000xxxx …...
Spring AOP 使用方法总结
AOP切面编程的最佳应用场景 记录日志性能监控事务管理处理异常数据验证,验证传入参数的正确性(一般不用这个方法做,而是用拦截器) spring提供了以下注解供开发者使用,编写AOP程序 Aspect 申明切面Pointcut 切点&#…...
LeetCode 每日一题 2024/10/21-2024/10/27
记录了初步解题思路 以及本地实现代码;并不一定为最优 也希望大家能一起探讨 一起进步 目录 10/21 910. 最小差值 II10/22 3184. 构成整天的下标对数目 I10/23 3185. 构成整天的下标对数目 II10/24 3175. 找到连续赢 K 场比赛的第一位玩家10/25 3180. 执行操作可获得…...
不到1500元的I卡可以玩转3A大作吗?撼与科技Intel Arc A750显卡游戏性能实
一、前言 还记得2022年10月的时候,英特尔发布了Arc A750和A770显卡,和此前所发布的DG1、A380不同,这两张显卡可以说是真正意义上的游戏显卡。不知不觉间,两年已经过去了,在这两年期间,英特尔不仅在积极地打…...
STK与MATLAB互联——仿真导航卫星与地面用户间距离和仰角参数
文章目录 构建GPS星座创建单个PRN的GPS卫星创建GPS星座,并为其添加发射机 北斗星座构建搭建低轨铱星星座构建一颗轨道高度为800km/1000km/1200km的低轨卫星构建一颗轨道高度为800km/1000km/1200km的低轨卫星建立地面站,可见性分析确定地面站坐标分析单颗…...
js面试问题笔记(一)
一.热门js面试 1.简述同步和异步的区别? 同步: 浏览器访问服务器请求,用户看到页面刷新 ,重新发请求,等请求完,页面刷新,新内容出现,用户看到新内容,进行下一步操作 异步: 浏览器访问服务器请求,用户正常操作,浏览器后端进行请求,等请求完,页面不刷新,新内容也会出现,用户看到…...
pip 和 pipx 的主要区别?
特性pippipx用途用于安装Python库或命令行应用程序,可以安装带entry points的库专门用于安装和管理Python命令行工具,每个工具都在隔离的虚拟环境中运行虚拟环境不自动创建虚拟环境,需要手动使用 venv 或 virtualenv 创建自动为每个安装的工具…...
4457M数字示波器
_XLT新利通_ 4457M数字示波器 带宽500MHz到3GHz 4457M系列数字示波器产品,包含4457DM/EM/FM/GM四个产品型号,模拟通道数4、8个,带宽500MHz到3GHz,最高采样率10GSa/s,垂直分辨率8bit,最大存储深度2Gpts。…...
【永中软件-注册/登录安全分析报告】
前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 暴力破解密码,造成用户信息泄露短信盗刷的安全问题,影响业务及导致用户投诉带来经济损失,尤其是后付费客户,风险巨大,造成亏损无底洞…...
Tomcat作为web的优缺点
文章目录 优点缺点 优点 开源:Tomcat是Apache软件基金会的一个项目,这意味着它是免费且开放源代码的。这为开发者提供了高度的自由度来修改和扩展其功能。 轻量级:与一些全功能的Java EE应用服务器(如IBM WebSphere, Oracle WebL…...
conda虚拟环境中安装cuda方法、遇到的问题
conda虚拟环境中安装cuda方法、遇到的问题 文章目录 conda虚拟环境中安装cuda方法、遇到的问题conda虚拟环境中安装cudacuda.h和cuda_runtime.hpytorch运行时的CUDA版本其他问题检查包冲突nvcc -V和nvidia-smi显示的版本不一致cuda路径 conda虚拟环境中安装cuda 参考文章&…...
【CPN TOOLS建模学习】设置变迁的属性
使用Tab键在属性之间进行切换 与一个变迁相关联的四个铭文,均为可选项: 变迁名称守卫(Guard)时间代码段 变迁延迟必须是一个正整数表达式。该表达式前面加上,这意味着时间铭文的形式为 delayexpr。在添加时间铭文之前,铭文的默…...
一个简单的例子,说明Matrix类的妙用
在Android、前端或者别的平台的软件开发中,有时会遇到类似如下需求: 将某个图片显示到指定的区域;要求不改变图片本身的宽高比,进行缩放;要求最大限度的居中填充到显示区域。 以下示意图可以简单描绘该需求 以Androi…...
【C++】类和对象(四):析构函数
大家好,我是苏貝,本篇博客带大家了解C的析构函数,如果你觉得我写的还不错的话,可以给我一个赞👍吗,感谢❤️ 目录 1. 概念2. 特性 1. 概念 通过前面构造函数的学习,我们知道一个对象是怎么来的…...
linux中各目录作用及介绍
目录 1 /usr 1 /usr /usr 是 Unix-like 操作系统中的一个重要目录之一,代表可共享的用户资源(User System Resources)或 Unix Software Resource(UNIX 软件资源)。 /usr 目录通常包含了系统的许多可共享资源…...
v4.7版本使用线下付款方式不给管理员发送新订单通知问题修复
在app/api/controller/v1/order/StoreOrderController.php文件中,将红框内的代码注释,加上绿框的代码即可修复 if ($this->services->setOrderTypePayOffline($order[order_id])) {event(NoticeListener, [$order, admin_pay_success_code]);retur…...
vue3中mitt和pinia的区别和主要用途,是否有可重合的部分?
在 Vue 中,Mitt 和 Pinia 是两个不同的工具,它们的主要用途和功能有所不同,但在某些方面也存在重合的部分。 区别 Mitt: Mitt 是一个简单而强大的事件总线库,用于在组件之间进行事件的发布和订阅。 它提供了一种简洁…...
飞书文档解除复制限制
解除飞书文档没有编辑器权限限制复制功能方法 方法一:使用插件 方法二: 通过调试工具删除所有的copy事件 使用插件 缺点: 只有markdown格式,如果需要其他格式需要再通过Typora等markdown编辑器转pdf,word等格式 安装插件 Cloud Do…...
vue3中ref和reactive的用法,区别和优缺点,以及使用场景
写在前头: reactive定义的数据只能修改里面的属性,不能将整个数据替换,实在要替换请使用 Object.assign(obj1, obj2);举个例子 这种写法无法直接改变obj1 let obj1 reactive({name: 猫,age: 2, });obj1 {name: 猪,age: 2, } 正确的写法…...
电脑技巧:Rufus——最佳USB启动盘制作工具指南
目录 一、功能强大,兼容性广泛 二、界面友好,操作简便 三、快速高效,高度可定制 四、安全可靠,社区活跃 在日常的电脑使用中,无论是为了安装操作系统、修复系统故障还是进行其他需要可引导媒体的任务,拥…...
vue的基本使用
简介 vue组件 三个部分组成:结构、样式、逻辑文本插值 类似于java的spel表达式属性绑定 綁定是单向绑定的,修改输入框无法改变原本的,只能读,不能写 <input :value="name" placeholder="Type your name"><script> export default {name: H…...
C#高级:利用 CancellationToken 实现方法超时控制,提升应用响应性
完整版: using System; using System.Threading; using System.Threading.Tasks;public class Program {public static async Task Main(){var cts new CancellationTokenSource();// 设置超时时间为10秒cts.CancelAfter(TimeSpan.FromSeconds(3));try{var resul…...
Java Lock LockSupport 总结
前言 相关系列 《Java & Lock & 目录》(持续更新)《Java & Lock & LockSupport & 源码》(学习过程/多有漏误/仅作参考/不再更新)《Java & Lock & LockSupport & 总结》(学习总结/最新…...
线性表之链式存储基本操作(c语言实现,附解析)
今天,我来讲一下数据结构链表的基本操作,首先我们要知道链表的基本操作有创建,查找,插入,删除。接下来我们逐一实现操作。 结构体定义 typedef struct Node* List; struct Node{ ElementType Data; List next; };文章…...
27.Redis哨兵架构
Redis哨兵高可用架构 Sentinel(哨兵)是一种特殊的 Redis 服务,其主要功能并非提供常规的读写服务,而是专门用于监控 Redis 实例节点。 1.在哨兵架构下,客户端(client 端)首次会从哨兵处找出 Re…...
BGP路由优选
BGP 的路由优选规则是一套多步决策链,用来确定在多个可行路由中选择最优的路由。BGP 是一种路径向量协议,通过这些优选规则,网络管理员可以控制数据流量的流向,确保网络的稳定性和效率。下面以一个实例来详细说明 BGP 的优选规则及…...
cjson内存泄漏问题注意事项
(1)使用root cJSON_Parse(text); //将字符串转成json格式,函数中申请了一块内存给root 所以在最后要释放root cJSON_Delete(root ); //释放cJSON_Parse()分配出来的内存空间 (2)使用out cJSON_Print(root);(含有cJSON_PrintUnformatted函数&#x…...
雷军救WPS“三次”,WPS注入新生力量,不再“抄袭”微软
救WPS“三次” 1989年,求伯君用128万行代码编写出了WPS1.0,宣告了中国自主办公时代的开启。 那时候,雷军还在武汉大学深造,他早就把求伯君当成了自己的榜样,这一来二去的,雷军和WPS之间也就结下了不解之缘…...
zookeeper全系列学习之分布式锁实现
文章目录 前言一、分布式锁的通用实现思路二、ZK实现分布式锁的思路三、ZK实现分布式锁的编码实现1、核心工具类实现2、测试代码编写线程安全问题复现使用上面封装的ZkLockHelper实现的分布式锁 优点缺点 总结 前言 就像上篇文章zookeeper全系列学习之统一配置获取说的&#x…...
耐用的内衣洗衣机有哪些?双11好用内衣洗衣机品牌排行榜
现代社会高速发展,人们对于生活品质的追求不断提高,内衣作为贴身衣物,其清洁程度直接关系到个人卫生和健康。因此,耐用且高效的内衣洗衣机成为了许多家庭的必需品。在双11购物节期间,众多品牌推出了各种优惠活动&#…...
咸宁网站设计公司/seo网络营销推广公司深圳
alter any cluster 修改任意簇的权限alter any index 修改任意索引的权限alter any role 修改任意角色的权限alter any sequence 修改任意序列的权限alter any snapshot 修改任意快照的权限alter any table 修改任意表的权限alter any trigger 修改任意触发器的权限alter clust…...
dw创建网站相册/怎么恶意点击对手竞价
QML (Qt Modeling Language) is a user interface markup language. It is a declarative language for designing user interface–centric applications....
wordpress 更新网站/免费发帖平台
大纲复习 服务治理: nacos 注册中心(nacos 同时解决配置)Eureka配置 为什么要用注册中心 一旦服务提供者地址变化,就需要手工修改代码 一旦是多个服务提供者,无法实现负载均衡功能 一旦服务变得越来越多,…...
门户网站平台建设方案/行业数据统计网站
一、复制表1. 复制表结构及其数据:create table table_name_new as select * from table_name_old2. 只复制表结构:create table table_name_new as select * from table_name_old where 12;或者:create table table_name_new like table_nam…...
京东网站建设步骤/广东云浮疫情最新情况
全球最厉害的14位程序员都有哪些人?接下来让我们一起来看一下让业界膜拜的这十几位顶级编程大神。 注意,排名不分先后。 01 Jon Skeet 个人名望:程序技术问答网站Stack Overflow总排名第一的大神,每月的问答量保持在425个左右。 …...
铜煤建设网站/seo优化排名易下拉软件
虽然,SQL Server中的DTS也能将数据倒入Excel,但不如使用程序灵活, 本程序主要代码在按钮函数内。可适应于报表开发的读取数据部分:) 我删除了原程序的很多垃圾代码,只留主要起作用的代码 //加入名称空间 using System.Data; using System.Data.SqlClie…...