You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改Python Slack Bolt Socket Mode代码实现自动重载

问题原因

你用uvicorn失效的核心原因是:Slack Bolt的App实例并非ASGI应用,SocketModeHandler是独立的WebSocket事件循环启动器,而uvicorn是用来运行FastAPI、Starlette这类ASGI服务的工具,两者运行逻辑完全不匹配,自然无法触发斜杠命令。

替代自动重载方案

方案1:用watchdog编写监控脚本

watchdog是Python的文件系统监控库,可以轻松实现文件变更后重启进程。

  1. 安装依赖:
pip install watchdog
  1. 创建reload.py脚本:
import subprocess
import sys
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler

class CodeReloader(FileSystemEventHandler):
    def __init__(self):
        self.process = self._start_app()

    def _start_app(self):
        print("Starting Slack Socket Mode app...")
        return subprocess.Popen([sys.executable, "main.py"])

    def on_modified(self, event):
        # 只监控Python文件变更
        if not event.is_directory and event.src_path.endswith(".py"):
            print(f"File changed: {event.src_path}")
            print("Restarting app...")
            self.process.kill()
            self.process = self._start_app()

if __name__ == "__main__":
    event_handler = CodeReloader()
    observer = Observer()
    # 监控当前目录下所有文件变化
    observer.schedule(event_handler, path=".", recursive=True)
    observer.start()
    try:
        while True:
            pass
    except KeyboardInterrupt:
        print("Stopping reloader...")
        observer.stop()
    observer.join()
  1. 运行脚本:
python reload.py

修改main.py或其他Python文件后,进程会自动重启,斜杠命令可以正常触发。

方案2:用entr命令行工具(Linux/macOS)

如果不想写Python脚本,可以用轻量命令行工具entr,直接监控文件变化并重启进程。

  1. 安装entr:
  • macOS:brew install entr
  • Debian/Ubuntu:sudo apt install entr
  • RHEL/CentOS:sudo yum install entr
  1. 运行监控命令:
find . -name "*.py" | entr -r python main.py

这条命令会监控当前目录下所有Python文件,一旦文件修改,自动重启main.py进程。

方案3:结合python-dotenv的增强版(可选)

如果你的项目用了环境变量管理,可以结合python-dotenv,在重启时自动加载最新的环境变量:

修改reload.py中的_start_app方法:

import os

def _start_app(self):
    print("Starting Slack Socket Mode app...")
    # 加载.env文件的环境变量
    env = os.environ.copy()
    try:
        from dotenv import load_dotenv
        load_dotenv()
        env.update(os.environ)
    except ImportError:
        pass
    return subprocess.Popen([sys.executable, "main.py"], env=env)

需要先安装依赖:pip install python-dotenv

内容的提问来源于stack exchange,提问作者vinod827

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 14:22:42