import subprocess from pathlib import Path import sys import logging import shutil # 设置日志记录 logging.basicConfig(level=logging.DEBUG, filename='rasa_run.log', filemode='w', format='%(name)s - %(levelname)s - %(message)s') # 获取 rasa 命令的路径 rasa_path = r"D:\Anaconda3\envs\lq1\Scripts\rasa.exe" if not rasa_path: logging.error("Rasa 命令未找到,请检查是否已正确安装") print("Rasa 命令未找到,请检查是否已正确安装", file=sys.stderr) sys.exit(1) # 确保程序退出 def get_resource_path(relative_path): """获取资源的真实路径""" if getattr(sys, 'frozen', False): # 如果是打包后的exe程序,则获取临时目录下的资源路径 base_path = Path(sys._MEIPASS) else: # 否则,获取当前文件所在目录 base_path = Path(__file__).resolve().parent return str(base_path / relative_path) def main(): # 获取模型路径(假设你有一个名为 'models' 的文件夹) model_filename = "20241127-105650.tar.gz" model_path = get_resource_path(f"models/{model_filename}") # 获取 endpoints.yml 路径 endpoints_path = get_resource_path("endpoints.yml") # 输出调试信息 logging.info(f"模型路径: {model_path}") logging.info(f"端点配置路径: {endpoints_path}") # 确保模型文件和 endpoints 文件存在 if not Path(model_path).is_file() or not Path(endpoints_path).is_file(): logging.error("模型文件或端点配置文件不存在") print("模型文件或端点配置文件不存在", file=sys.stderr) return # 启动 Rasa 服务器 try: logging.info("启动 Rasa 服务器...") command = [ rasa_path, 'run', '--model', model_path, '--endpoints', endpoints_path # 添加 endpoints 参数 ] subprocess.run(command, check=True) # 将 check=True 用于捕获错误 except subprocess.CalledProcessError as e: logging.error(f"启动 Rasa 服务器失败: {e}") print(f"启动 Rasa 服务器失败: {e}", file=sys.stderr) except FileNotFoundError: logging.error("Rasa 命令未找到,请检查是否已正确安装并包含在打包文件中") print("Rasa 命令未找到,请检查是否已正确安装并包含在打包文件中", file=sys.stderr) except Exception as e: logging.exception("发生意外错误") print(f"发生意外错误: {e}", file=sys.stderr) if __name__ == '__main__': main() if __name__ == '__main__': main()