[erpnext] 保存时出现 BrokenPipeError: [Errno 32] Broken pipe 的问题

· Python

发现问题

我在 Frappe Framework -> Build -> Views 添加新的展示项目时,出现了这个问题:

保存后,API 报错信息如下:

关键堆栈信息:

Traceback (most recent call last):
  File "/var/www/erpnext/erp-bench/apps/frappe/frappe/app.py", line 121, in application
    response = frappe.api.handle(request)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/var/www/erpnext/erp-bench/apps/frappe/frappe/api/__init__.py", line 60, in handle
    data = endpoint(**arguments)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/var/www/erpnext/erp-bench/apps/frappe/frappe/api/v1.py", line 36, in handle_rpc_call
    return frappe.handler.handle()
           ^^^^^^^^^^^^^^^^^^^^^^^
  File "/var/www/erpnext/erp-bench/apps/frappe/frappe/handler.py", line 51, in handle
    data = execute_cmd(cmd)
           ^^^^^^^^^^^^^^^^
  File "/var/www/erpnext/erp-bench/apps/frappe/frappe/handler.py", line 84, in execute_cmd
    return frappe.call(method, **frappe.form_dict)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/var/www/erpnext/erp-bench/apps/frappe/frappe/__init__.py", line 1127, in call
    return fn(*args, **newargs)
           ^^^^^^^^^^^^^^^^^^^^
  File "/var/www/erpnext/erp-bench/apps/frappe/frappe/utils/typing_validations.py", line 36, in wrapper
    return func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/var/www/erpnext/erp-bench/apps/frappe/frappe/desk/doctype/workspace/workspace.py", line 307, in save_page
    save_new_widget(doc, name, blocks, new_widgets)
  File "/var/www/erpnext/erp-bench/apps/frappe/frappe/desk/desktop.py", line 598, in save_new_widget
    doc.save(ignore_permissions=True)
  File "/var/www/erpnext/erp-bench/apps/frappe/frappe/model/document.py", line 485, in save
    return self._save(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/var/www/erpnext/erp-bench/apps/frappe/frappe/model/document.py", line 538, in _save
    self.run_post_save_methods()
  File "/var/www/erpnext/erp-bench/apps/frappe/frappe/model/document.py", line 1323, in run_post_save_methods
    self.run_method("on_update")
  File "/var/www/erpnext/erp-bench/apps/frappe/frappe/model/document.py", line 1129, in run_method
    out = Document.hook(fn)(self, *args, **kwargs)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/var/www/erpnext/erp-bench/apps/frappe/frappe/model/document.py", line 1526, in composer
    return composed(self, method, *args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/var/www/erpnext/erp-bench/apps/frappe/frappe/model/document.py", line 1504, in runner
    add_to_return_value(self, fn(self, *args, **kwargs))
                              ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/var/www/erpnext/erp-bench/apps/frappe/frappe/model/document.py", line 1126, in fn
    return method_object(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/var/www/erpnext/erp-bench/apps/frappe/frappe/desk/doctype/workspace/workspace.py", line 114, in on_update
    export_to_files(record_list=[["Workspace", self.name]], record_module=self.module)
  File "/var/www/erpnext/erp-bench/apps/frappe/frappe/modules/export_file.py", line 27, in export_to_files
    write_document_file(
  File "/var/www/erpnext/erp-bench/apps/frappe/frappe/modules/export_file.py", line 58, in write_document_file
    print(f"Wrote document file for {doc.doctype} {doc.name} at {path}")
BrokenPipeError: [Errno 32] Broken pipe

问题原因

frappe/modules/export_file.py 中使用了 print() 方法

解决方法

print() 方法更改为 frappe.logger().info()

再次保存时,不再出错。

发表评论