diff --git a/code-server-like/app/__init__.py b/code-server-like/app/__init__.py index 06c3bb1..19879f5 100644 --- a/code-server-like/app/__init__.py +++ b/code-server-like/app/__init__.py @@ -1,5 +1,32 @@ import eventlet -eventlet.monkey_patch() # 进行猴子补丁操作 +import logging + +# 配置 eventlet 日志,抑制 IOClosed 等错误日志 +logging.getLogger('eventlet.hubs').setLevel(logging.CRITICAL) +logging.getLogger('eventlet.greenio').setLevel(logging.CRITICAL) + +# 进行猴子补丁操作 +eventlet.monkey_patch() + +# 配置 eventlet hub 以更优雅地处理 IOClosed 错误 +try: + from eventlet.hubs import hub + # 保存原始的 handle_error 方法 + original_handle_error = hub.Hub.handle_error + + def custom_handle_error(self, context, type, value, tb): + # 忽略 IOClosed 错误 + if type.__name__ == 'IOClosed' and 'Operation on closed file' in str(value): + return + # 其他错误调用原始方法 + original_handle_error(self, context, type, value, tb) + + # 替换原始方法 + hub.Hub.handle_error = custom_handle_error +except Exception as e: + # 如果修改失败,忽略错误 + pass + from flask import Flask from .views.routes import main_bp from .views.file import file_bp diff --git a/code-server-like/run.py b/code-server-like/run.py index 48cdcd7..c7e4dda 100644 --- a/code-server-like/run.py +++ b/code-server-like/run.py @@ -10,11 +10,23 @@ logging.getLogger('werkzeug').setLevel(logging.ERROR) app = create_app() if __name__ == '__main__': - socketio.run( - app, - host="0.0.0.0", - port=5200, - debug=False, # 开发期打开 - allow_unsafe_werkzeug=True, # 避免 dev server 的安全限制提示 - log_output=False # 禁用详细输出 + try: + socketio.run( + app, + host="0.0.0.0", + port=5200, + debug=False, # 开发期打开 + allow_unsafe_werkzeug=True, # 避免 dev server 的安全限制提示 + log_output=False # 禁用详细输出 ) + except KeyboardInterrupt: + print("Server stopped by user") + except Exception as e: + # 捕获所有异常,包括 eventlet 内部的 IOClosed 错误 + if "IOClosed" in str(type(e).__name__) or "Operation on closed file" in str(e): + # 优雅处理 eventlet 关闭文件的错误 + print("Eventlet IOClosed error handled gracefully") + else: + # 其他异常仍然打印 + import traceback + traceback.print_exc()