1
2
Derivar 1
mt5-manager/main.py
2025-10-07 21:48:20 +03:00

71 linhas
2,7 KiB
Python

# Импортируем нужные классы из библиотек
from fastapi import FastAPI
from fastapi.responses import HTMLResponse, JSONResponse
import subprocess
import psutil
# Создаём объект приложения
app = FastAPI()
# Обработчик GET-запросов по адресу / (корневой каталог)
@app.get('/', response_class=HTMLResponse)
async def index():
return '<h1>MT5 Manager</h1>'
# Обработчик POST /start - запуск терминала
@app.post('/start')
async def start_instance():
result = start_mt5()
return JSONResponse(result)
# Обработчик POST /stop - остановка терминала
@app.post('/stop', response_class=JSONResponse)
async def stop_instance():
result = stop_mt5()
return JSONResponse(result)
# Путь к запускаемому файлу терминала
MT5_PATH = 'C:/Program Files/MetaTrader 5/terminal64.exe'
# Словарь для хранения информации о запущенном терминале
instances = {}
# Запуск терминала
def start_mt5():
# Запускаем новый процесс
process = subprocess.Popen([MT5_PATH])
# Идентификатор запущенного процесса
pid = process.pid
# Запоминаем идентификатор и статус процесса
instances['default'] = {'pid': pid, 'status': 'running'}
# Возвращаем результат - успешный запуск
return {'instance': 'default', 'pid': pid}
# Остановка терминала
def stop_mt5():
# Если ранее терминал был запущен
if 'default' in instances:
# Берём идентификатор его процесса
pid = instances['default']['pid']
try:
# Получаем объект процесса терминала
p = psutil.Process(pid)
# Останавливаем процесс
p.terminate()
# Удаляем информацию о запущенном ранее процессе
del instances['default']
# Возвращаем результат - успешная остановка
return {'status': 'stopped', 'instance': 'default'}
except psutil.NoSuchProcess:
# Если процесс не найден, то
# удаляем информацию о запущенном ранее процессе
del instances['default']
# Возвращаем результат - процесс не найден
return {'status': 'not found', 'instance': 'default'}