modbus_test/run_local.py

103 lines
3.2 KiB
Python

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()
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()