main.py 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. import subprocess
  2. import asyncio
  3. from time import sleep
  4. from pymobiledevice3.lockdown import create_using_usbmux
  5. from pymobiledevice3.services.dvt.instruments.process_control import ProcessControl
  6. from pymobiledevice3.services.installation_proxy import InstallationProxyService
  7. from pymobiledevice3.services.dvt.dvt_secure_socket_proxy import DvtSecureSocketProxyService
  8. BUNDLE_ID = 'com.laiwang.DingTalk'
  9. # >ios17 pymobiledevice3 lockdown start-tunnel
  10. # <ios17:
  11. COMMAND = 'pymobiledevice3 remote start-tunnel'
  12. async def main():
  13. try:
  14. # 使用命令方式启动管道
  15. try:
  16. # 使用 -S 参数让 sudo 从 stdin 读取密码
  17. result = subprocess.run(
  18. ["sudo", "-S"] + COMMAND.split(),
  19. input="d123456\n",
  20. text=True,
  21. capture_output=True,
  22. check=True
  23. )
  24. sleep(5)
  25. if result.stdout:
  26. print('管道启动成功')
  27. # 连接手机
  28. lockdown = create_using_usbmux()
  29. print("开发者模式",lockdown.developer_mode_status)
  30. # 获取钉钉-app
  31. with InstallationProxyService(lockdown) as installer:
  32. # 查找特定应用
  33. ddApp = [app for app in installer.get_apps() if 'DingTalk' in app]
  34. if len(ddApp):
  35. print("找到包",ddApp[0])
  36. if ddApp[0] == BUNDLE_ID:
  37. # 打开app
  38. with DvtSecureSocketProxyService(lockdown) as dvt:
  39. process_control = ProcessControl(dvt)
  40. pid = process_control.launch(BUNDLE_ID)
  41. print("启动app",pid)
  42. else:
  43. print("包名不匹配")
  44. else:
  45. print("没找到包,请安装钉钉")
  46. else:
  47. print("管道启动识别:", result.stderr)
  48. except subprocess.CalledProcessError as e:
  49. print(f"命令执行失败 (退出码: {e.stderr}):")
  50. except ConnectionError as e:
  51. print(f"连接失败")
  52. if __name__ == '__main__':
  53. asyncio.run(main())