eval_python
Execute Python code directly on device's main process for instant automation, debugging, and composite decision-making. Returns results immediately.
Instructions
在设备主进程的 Python 上下文中直接 exec 任意代码,立即返回结果(Android + iOS)。 几百毫秒一轮,不需要 upload_file/run_project,适合:
探索性调试:试 selector / 找图 / OCR / 找色 / 一次点击
复合决策:把'看屏幕→判断→点击'打包一段 Python 一次执行
自动裁模板、SoM 标注、智能 tap 路由
任意一次性同步 API 调用:action.click / slide / Selector(任何 mode) / Permission / KeyValue / Sms / Clipboard 等
Android 主进程 client 已本地 stub 化(App.java onCreate 时 bindClient),所有原本走 :py 进程 IPC 的 API 现在 eval 里也能直接调。
⛔ 红线:eval 代码无法外部中断!HTTP 60s 超时只断客户端连接,服务端 Python 仍在跑直到自然返回;卡住 = 整个 App UI 冻住。所有循环必须 range/deadline 限定, sleep ≤ 5s,try/except 整段。超过 30s 的逻辑改用 upload + run_project(可被 stop_project kill)。
⚠ 仍需谨慎的场景:
长循环 / 耗时 > 30s:用 upload+run_project
回调注册(event.on / sensor.on):register 能调用,但 eval 返回时 _result 已定,回调触发的数据拿不回 — 持续监听必须用 upload+run_project
长 session(cloud_control 连云、ESP32 BLE HID 持久会话):建议用工程模式
完整指南见 docs/AGENT_EVAL_GUIDE.md。
代码必须把结果赋给 _result 全局变量。返回值约定:
简单字符串:_result = 'ok'
结构化数据(推荐):_result = json.dumps({'found': True, 'x': 320})
含截图返回:_result = json.dumps({'data': {...}, 'image_base64': '...'}) (MCP 自动识别 image_base64 字段并以图片形式返回给 AI 多模态查看)
image_path 非空时 App 会注入 _im_source 全局变量指向该图片路径; iOS 上若代码中引用 img 变量,会被预读为 cv2 ndarray。
跨平台:iOS 端会自动把 ascript.android. 替换为 ascript.ios.,
并预加载 cv2 / np / Image (PIL) 到执行环境,常用片段几乎无需修改。
完整 API 参见 search_api / get_module_apis(按 platform 选择)。
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | 要执行的 Python 代码。必须将结果赋给 _result 变量。 | |
| image_path | No | 可选:传入已有图片路径,App 会注入为 _im_source 全局变量。 |