modbus_test/run_local.py

83 lines
3.0 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()
# Установка команды для pybullet_server
pybullet_command = [
"poetry",
"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", "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()