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