| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- import subprocess
- import asyncio
- from time import sleep
- from pymobiledevice3.lockdown import create_using_usbmux
- from pymobiledevice3.services.dvt.instruments.process_control import ProcessControl
- from pymobiledevice3.services.installation_proxy import InstallationProxyService
- from pymobiledevice3.services.dvt.dvt_secure_socket_proxy import DvtSecureSocketProxyService
- BUNDLE_ID = 'com.laiwang.DingTalk'
- # >ios17 pymobiledevice3 lockdown start-tunnel
- # <ios17:
- COMMAND = 'pymobiledevice3 remote start-tunnel'
- async def main():
- try:
- # 使用命令方式启动管道
- try:
- # 使用 -S 参数让 sudo 从 stdin 读取密码
- result = subprocess.run(
- ["sudo", "-S"] + COMMAND.split(),
- input="d123456\n",
- text=True,
- capture_output=True,
- check=True
- )
- sleep(5)
- if result.stdout:
- print('管道启动成功')
- # 连接手机
- lockdown = create_using_usbmux()
- print("开发者模式",lockdown.developer_mode_status)
- # 获取钉钉-app
- with InstallationProxyService(lockdown) as installer:
- # 查找特定应用
- ddApp = [app for app in installer.get_apps() if 'DingTalk' in app]
- if len(ddApp):
- print("找到包",ddApp[0])
- if ddApp[0] == BUNDLE_ID:
- # 打开app
- with DvtSecureSocketProxyService(lockdown) as dvt:
- process_control = ProcessControl(dvt)
- pid = process_control.launch(BUNDLE_ID)
- print("启动app",pid)
- else:
- print("包名不匹配")
- else:
- print("没找到包,请安装钉钉")
- else:
- print("管道启动识别:", result.stderr)
- except subprocess.CalledProcessError as e:
- print(f"命令执行失败 (退出码: {e.stderr}):")
- except ConnectionError as e:
- print(f"连接失败")
- if __name__ == '__main__':
- asyncio.run(main())
|