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", action="store_true", help="Запуск в режиме тестирования") args = parser.parse_args() # Установка команды для pybullet_server pybullet_command = ["./pybullet_server.exe"] # Путь к исполняемому файлу # Если включен режим тестирования, добавляем флаг --test if args.test: 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: print("Запуск test_socket_server...") test_server_process = subprocess.Popen(["./test_socket_server.exe"]) # Путь к исполняемому файлу # Проверка успешного запуска тестового сервера if test_server_process.poll() is not None: print("Ошибка при запуске test_socket_server") sys.exit(1) # Запуск основного скрипта main.exe в режиме тестирования subprocess.run(["./main.exe", "--mode", "test"]) # Путь к исполняемому файлу else: # Запуск основного скрипта main.exe subprocess.run(["./main.exe"]) # Путь к исполняемому файлу # Очистка после завершения cleanup()