CadHubManage/test_software_manager.py
root e6261532f7 feat: 添加软件停止功能并修复Creo进程检测问题
## 主要修复
- 修复Creo软件运行状态检测失败问题
- 添加完整的软件停止功能支持
- 改进多进程软件的进程管理逻辑

## 技术改进
- 更新软件配置支持多进程名称检测
- 优化进程停止逻辑,增加超时配置
- 新增 stop_software WebSocket消息类型
- 完善错误处理和日志记录

## 配置更新
- configs/software_config.yaml: 支持进程名称列表和停止超时
- 添加Revit 2017配置支持

## 文档更新
- README.md: 更新软件配置说明和API列表
- frontend-api-docs.md: 添加停止软件API文档
- CHECKPOINT.md: 记录修复进展和解决方案

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-24 17:24:49 +08:00

64 lines
2.3 KiB
Python

import sys
import asyncio
sys.path.append('app')
from core.software_manager import software_manager
async def test_software_manager():
print("=== 测试软件管理器 ===")
# 测试获取软件列表
print("\n1. 测试获取软件列表:")
try:
software_list = await software_manager.get_software_list()
print("✅ 软件列表获取成功:")
for software in software_list:
print(f" - {software['id']}: {software['name']} (运行: {software['is_running']})")
except Exception as e:
print(f"❌ 获取软件列表失败: {e}")
# 测试软件状态检查
print("\n2. 测试软件状态检查:")
try:
creo_running = software_manager.is_software_running("creo")
autocad_running = software_manager.is_software_running("autocad")
print(f"✅ Creo 运行状态: {creo_running}")
print(f"✅ AutoCAD 运行状态: {autocad_running}")
except Exception as e:
print(f"❌ 软件状态检查失败: {e}")
# 测试启动软件(不会真正启动,因为路径可能不存在)
print("\n3. 测试启动软件任务创建:")
try:
task = await software_manager.start_software("creo")
print(f"✅ 启动任务创建成功:")
print(f" - 任务ID: {task.id}")
print(f" - 软件ID: {task.software_id}")
print(f" - 任务类型: {task.task_type}")
print(f" - 初始状态: {task.status}")
# 等待一会儿看任务状态变化
await asyncio.sleep(2)
updated_task = software_manager.get_task(task.id)
print(f" - 2秒后状态: {updated_task.status}")
print(f" - 进度: {updated_task.progress}%")
if updated_task.error_message:
print(f" - 错误信息: {updated_task.error_message}")
except Exception as e:
print(f"❌ 启动软件任务失败: {e}")
# 测试错误处理
print("\n4. 测试错误处理:")
try:
# 尝试启动不存在的软件
await software_manager.start_software("nonexistent")
except ValueError as e:
print(f"✅ 正确捕获错误: {e}")
except Exception as e:
print(f"❌ 未预期的错误: {e}")
print("\n=== 软件管理器测试完成 ===")
if __name__ == "__main__":
asyncio.run(test_software_manager())