117 lines
3.6 KiB
Python
117 lines
3.6 KiB
Python
import subprocess
|
||
import argparse
|
||
import sys
|
||
import signal
|
||
import psutil
|
||
|
||
# Параметры для процессов
|
||
server_process = None
|
||
test_server_process = None
|
||
|
||
|
||
def usage():
|
||
"""Функция для отображения помощи"""
|
||
print("Usage: run_all.py [--test]")
|
||
sys.exit(1)
|
||
|
||
|
||
def terminate_process(process):
|
||
"""Функция для корректного завершения процесса и всех его дочерних процессов"""
|
||
if process:
|
||
proc = psutil.Process(process.pid)
|
||
for child in proc.children(recursive=True):
|
||
child.terminate()
|
||
proc.terminate()
|
||
proc.wait()
|
||
|
||
|
||
# Обработчик для сигналов выхода
|
||
def cleanup(*args):
|
||
"""Функция для остановки серверов при выходе"""
|
||
global server_process, test_server_process
|
||
print("Остановка серверов...")
|
||
terminate_process(server_process)
|
||
terminate_process(test_server_process)
|
||
print("Серверы остановлены.")
|
||
sys.exit(0) # Завершение работы после очистки
|
||
|
||
|
||
# Назначаем функции очистки для сигналов
|
||
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()
|
||
|
||
poetry_path = "poetry"
|
||
|
||
# Установка команды для pybullet_server
|
||
pybullet_command = [
|
||
poetry_path,
|
||
"run",
|
||
"python",
|
||
"utils/pybullet_server.py",
|
||
] # Путь к исполняемому файлу
|
||
|
||
# Если включен режим тестирования, добавляем флаг --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_path,
|
||
"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_path,
|
||
"run",
|
||
"python",
|
||
"main.py",
|
||
"--mode",
|
||
"test",
|
||
]
|
||
) # Путь к исполняемому файлу
|
||
else:
|
||
# Запуск основного скрипта main.exe
|
||
subprocess.run(
|
||
[
|
||
poetry_path,
|
||
"run",
|
||
"python",
|
||
"main.py",
|
||
]
|
||
) # Путь к исполняемому файлу
|
||
|
||
# Очистка после завершения
|
||
cleanup()
|