import subprocess import argparse import sys import signal # Параметры для процессов server_process = None test_server_process = None def usage(): """Функция для отображения помощи""" print("Usage: run_all.py [--test]") sys.exit(1) # Обработчик для сигналов выхода def cleanup(): """Функция для остановки серверов при выходе""" print("Остановка серверов...") if server_process: server_process.terminate() server_process.wait() if test_server_process: test_server_process.terminate() test_server_process.wait() print("Серверы остановлены.") # Назначаем функции очистки для сигналов signal.signal(signal.SIGINT, lambda *_: cleanup()) signal.signal(signal.SIGTERM, lambda *_: cleanup()) # Парсер аргументов командной строки parser = argparse.ArgumentParser(description="Python launcher script.") parser.add_argument("--test-socket", action="store_true", help="Запуск в режиме тестирования") parser.add_argument("--bullet-gui", action="store_true", help="Вывод визуального pybullet") args = parser.parse_args() # Установка команды для pybullet_server pybullet_command = [ "poetry", "run", "python", "utils/pybullet_server.py", "--test", ] # Путь к исполняемому файлу # Если включен режим тестирования, добавляем флаг --test if args.bullet_gui: pybullet_command.append("--test") # Запуск pybullet_server.exe print("Запуск pybullet_server...") server_process = subprocess.Popen(pybullet_command) # Проверяем успешный запуск сервера if server_process.poll() is not None: print("Ошибка при запуске pybullet_server") sys.exit(1) # Если включен режим тестирования, запускаем test_socket_server.exe if args.test_socket: print("Запуск test_socket_server...") test_server_process = subprocess.Popen( ["poetry", "run", "python", "utils/test_socket_server.py"] ) # Путь к исполняемому файлу # Проверка успешного запуска тестового сервера if test_server_process.poll() is not None: print("Ошибка при запуске test_socket_server") sys.exit(1) # Запуск основного скрипта main.exe в режиме тестирования subprocess.run( ["poetry", "run", "python", "main.py", "--mode", "test"] ) # Путь к исполняемому файлу else: # Запуск основного скрипта main.exe subprocess.run(["poetry", "run", "python", "main.py"]) # Путь к исполняемому файлу # Очистка после завершения cleanup()