bench execute 是 eval 模式
bench --site xxx execute只接受单个 Python 表达式(eval 模式),不支持多行语句、import、for 循环等。多行代码必须改用echo '...' | bench console管道方式。
1. 归属
| 问题 | 答案 |
|---|---|
| 属于哪个仓库? | frappe/frappe 框架的 bench CLI 工具 |
| 在容器内路径? | frappe/commands/utils.py 的 execute 实现 |
| 在构建链的哪一步? | 日常运维和调试 |
2. 为什么不能修正
Frappe 框架的设计选择。bench execute 定位是快速执行单个表达式(如 frappe.db.get_value(...))。复杂逻辑应该通过 bench console 交互式执行或写成 Script Report。
3. 缓解措施
记住两个规则:
- 单条语句 →
bench execute "frappe.db.get_value(...)" - 多行/import/for →
echo '...' | bench console - 注意 eval 模式下
frappe.db.xxx()会被错误解析成 module import → 换 SQL 或 console