From 4bb8c649d9b51c6104532336978836382dbe09f7 Mon Sep 17 00:00:00 2001 From: user Date: Tue, 12 Nov 2024 11:22:11 +0300 Subject: [PATCH] app path --- app.log | 97 +++++++++++++++++++++++++++++++++ main.py | 15 +++++- main.spec | 2 +- pybullet_server.spec | 2 +- robot/client_socket.py | 12 ++++- run.py | 81 +++++++++++++++++++++++----- run.spec | 2 +- run_local.py | 116 ---------------------------------------- test_socket_server.spec | 2 +- 9 files changed, 191 insertions(+), 138 deletions(-) delete mode 100644 run_local.py diff --git a/app.log b/app.log index a42bb8a..5b8d952 100644 --- a/app.log +++ b/app.log @@ -68910,3 +68910,100 @@ Joint 5 - Position: 2.6324369751913186e-19, Velocity: -1.7044130180708233e-30 - 2024-11-12 09:52:07,127 - logger - INFO - ['ok'] - client_socket.py - 329 2024-11-12 09:52:07,943 - logger - INFO - [1275.2009630203247, -73.22012633085251, 1781.279444694519] - client_socket.py - 265 2024-11-12 09:52:07,974 - logger - INFO - [58.56355473 -3.29212553 65.45517366] - client_socket.py - 268 +2024-11-12 10:25:19,330 - logger - INFO - robot_app . : get_status - main.py - 100 +2024-11-12 10:25:19,330 - logger - INFO - None - robot.py - 52 +2024-11-12 10:25:19,331 - logger - INFO - robot_app . : get_status - main.py - 100 +2024-11-12 10:25:19,331 - logger - INFO - robot_app . : get_status - main.py - 100 +2024-11-12 10:25:19,332 - logger - INFO - robot_app . : get_status - main.py - 100 +2024-11-12 10:25:19,332 - logger - INFO - robot_app . : get_world_coordinates - main.py - 100 +2024-11-12 10:25:19,332 - logger - INFO - robot_app . : get_axis_coordinates - main.py - 100 +2024-11-12 10:25:19,332 - logger - INFO - robot_app . : get_command_count - main.py - 100 +2024-11-12 10:25:20,371 - logger - INFO - Connect to 0 by SHARED_MEMORY - client_socket.py - 130 +2024-11-12 10:25:23,539 - logger - INFO - not_connected - robot.py - 52 +2024-11-12 10:25:23,859 - logger - INFO - urdf\sample.urdf - client_socket.py - 136 +2024-11-12 10:25:26,235 - logger - INFO - connected - robot.py - 52 +2024-11-12 10:28:58,010 - logger - INFO - robot_app . : get_status - main.py - 100 +2024-11-12 10:28:58,010 - logger - INFO - None - robot.py - 52 +2024-11-12 10:28:58,010 - logger - INFO - robot_app . : get_status - main.py - 100 +2024-11-12 10:28:58,010 - logger - INFO - robot_app . : get_status - main.py - 100 +2024-11-12 10:28:58,010 - logger - INFO - robot_app . : get_status - main.py - 100 +2024-11-12 10:28:58,010 - logger - INFO - robot_app . : get_world_coordinates - main.py - 100 +2024-11-12 10:28:58,010 - logger - INFO - robot_app . : get_axis_coordinates - main.py - 100 +2024-11-12 10:28:58,010 - logger - INFO - robot_app . : get_command_count - main.py - 100 +2024-11-12 10:28:59,056 - logger - INFO - Connect to 0 by SHARED_MEMORY - client_socket.py - 130 +2024-11-12 10:46:24,338 - logger - INFO - robot_app . : get_status - main.py - 100 +2024-11-12 10:46:24,338 - logger - INFO - None - robot.py - 52 +2024-11-12 10:46:24,339 - logger - INFO - robot_app . : get_status - main.py - 100 +2024-11-12 10:46:24,339 - logger - INFO - robot_app . : get_status - main.py - 100 +2024-11-12 10:46:24,340 - logger - INFO - robot_app . : get_status - main.py - 100 +2024-11-12 10:46:24,340 - logger - INFO - robot_app . : get_world_coordinates - main.py - 100 +2024-11-12 10:46:24,340 - logger - INFO - robot_app . : get_axis_coordinates - main.py - 100 +2024-11-12 10:46:24,341 - logger - INFO - robot_app . : get_command_count - main.py - 100 +2024-11-12 10:46:25,365 - logger - INFO - Connect to 0 by SHARED_MEMORY - client_socket.py - 130 +2024-11-12 10:46:31,872 - logger - INFO - not_connected - robot.py - 52 +2024-11-12 10:47:29,075 - logger - INFO - robot_app . : get_status - main.py - 100 +2024-11-12 10:47:29,075 - logger - INFO - None - robot.py - 52 +2024-11-12 10:47:29,075 - logger - INFO - robot_app . : get_status - main.py - 100 +2024-11-12 10:47:29,075 - logger - INFO - robot_app . : get_status - main.py - 100 +2024-11-12 10:47:29,075 - logger - INFO - robot_app . : get_status - main.py - 100 +2024-11-12 10:47:29,075 - logger - INFO - robot_app . : get_world_coordinates - main.py - 100 +2024-11-12 10:47:29,075 - logger - INFO - robot_app . : get_axis_coordinates - main.py - 100 +2024-11-12 10:47:29,075 - logger - INFO - robot_app . : get_command_count - main.py - 100 +2024-11-12 10:47:30,115 - logger - INFO - Connect to 0 by SHARED_MEMORY - client_socket.py - 130 +2024-11-12 10:47:34,205 - logger - INFO - not_connected - robot.py - 52 +2024-11-12 10:47:34,511 - logger - INFO - urdf\sample.urdf - client_socket.py - 136 +2024-11-12 10:47:36,492 - logger - INFO - connected - robot.py - 52 +2024-11-12 10:47:38,335 - logger - INFO - UPDATE MODEL FUNC - client_socket.py - 236 +2024-11-12 10:47:38,661 - logger - INFO - [-8.487, -8.681, 33.058, 88.07, -75.01, -10.566] - client_socket.py - 329 +2024-11-12 10:47:39,339 - logger - INFO - set joints - client_socket.py - 332 +2024-11-12 10:47:41,398 - logger - INFO - [1282.244, -75.427, 1772.476, 84.629, 34.519, 153.999] - client_socket.py - 329 +2024-11-12 10:47:42,040 - logger - INFO - convrt to joint (-0.1419952311009793, -0.1449204022049179, 0.5026174195392823, 1.2216711456832312, -0.9358879087734738, -0.3884501272764479) - client_socket.py - 324 +2024-11-12 10:47:42,071 - logger - INFO - set joints - client_socket.py - 332 +2024-11-12 10:47:44,185 - logger - INFO - ['ok'] - client_socket.py - 329 +2024-11-12 10:47:44,935 - logger - INFO - [1274.7745513916016, -69.17358189821243, 1776.4663696289062] - client_socket.py - 265 +2024-11-12 10:47:44,966 - logger - INFO - [43.9707828 3.05104526 45.3844952 ] - client_socket.py - 268 +2024-11-12 10:48:08,426 - logger - INFO - robot_app . : get_status - main.py - 100 +2024-11-12 10:48:08,426 - logger - INFO - None - robot.py - 52 +2024-11-12 10:48:08,426 - logger - INFO - robot_app . : get_status - main.py - 100 +2024-11-12 10:48:08,427 - logger - INFO - robot_app . : get_status - main.py - 100 +2024-11-12 10:48:08,427 - logger - INFO - robot_app . : get_status - main.py - 100 +2024-11-12 10:48:08,428 - logger - INFO - robot_app . : get_world_coordinates - main.py - 100 +2024-11-12 10:48:08,428 - logger - INFO - robot_app . : get_axis_coordinates - main.py - 100 +2024-11-12 10:48:08,429 - logger - INFO - robot_app . : get_command_count - main.py - 100 +2024-11-12 10:48:09,453 - logger - INFO - Connect to 0 by SHARED_MEMORY - client_socket.py - 130 +2024-11-12 10:48:12,705 - logger - INFO - not_connected - robot.py - 52 +2024-11-12 10:48:13,013 - logger - INFO - urdf\sample.urdf - client_socket.py - 136 +2024-11-12 10:48:14,985 - logger - INFO - connected - robot.py - 52 +2024-11-12 10:58:01,703 - logger - INFO - robot_app . : get_status - main.py - 100 +2024-11-12 10:58:01,703 - logger - INFO - None - robot.py - 52 +2024-11-12 10:58:01,703 - logger - INFO - robot_app . : get_status - main.py - 100 +2024-11-12 10:58:01,703 - logger - INFO - robot_app . : get_status - main.py - 100 +2024-11-12 10:58:01,704 - logger - INFO - robot_app . : get_status - main.py - 100 +2024-11-12 10:58:01,704 - logger - INFO - robot_app . : get_world_coordinates - main.py - 100 +2024-11-12 10:58:01,704 - logger - INFO - robot_app . : get_axis_coordinates - main.py - 100 +2024-11-12 10:58:01,705 - logger - INFO - robot_app . : get_command_count - main.py - 100 +2024-11-12 10:58:02,733 - logger - INFO - Connect to 0 by SHARED_MEMORY - client_socket.py - 130 +2024-11-12 10:58:06,001 - logger - INFO - not_connected - robot.py - 52 +2024-11-12 10:58:06,316 - logger - INFO - urdf\sample.urdf - client_socket.py - 136 +2024-11-12 10:58:08,385 - logger - INFO - connected - robot.py - 52 +2024-11-12 10:58:31,367 - logger - INFO - robot_app . : get_status - main.py - 100 +2024-11-12 10:58:31,367 - logger - INFO - None - robot.py - 52 +2024-11-12 10:58:31,367 - logger - INFO - robot_app . : get_status - main.py - 100 +2024-11-12 10:58:31,372 - logger - INFO - robot_app . : get_status - main.py - 100 +2024-11-12 10:58:31,372 - logger - INFO - robot_app . : get_status - main.py - 100 +2024-11-12 10:58:31,373 - logger - INFO - robot_app . : get_world_coordinates - main.py - 100 +2024-11-12 10:58:31,373 - logger - INFO - robot_app . : get_axis_coordinates - main.py - 100 +2024-11-12 10:58:31,373 - logger - INFO - robot_app . : get_command_count - main.py - 100 +2024-11-12 10:58:32,401 - logger - INFO - Connect to 0 by SHARED_MEMORY - client_socket.py - 130 +2024-11-12 11:02:57,863 - logger - INFO - robot_app . : get_status - main.py - 111 +2024-11-12 11:02:57,863 - logger - INFO - None - robot.py - 52 +2024-11-12 11:02:57,863 - logger - INFO - robot_app . : get_status - main.py - 111 +2024-11-12 11:02:57,863 - logger - INFO - robot_app . : get_status - main.py - 111 +2024-11-12 11:02:57,863 - logger - INFO - robot_app . : get_status - main.py - 111 +2024-11-12 11:02:57,863 - logger - INFO - robot_app . : get_world_coordinates - main.py - 111 +2024-11-12 11:02:57,863 - logger - INFO - robot_app . : get_axis_coordinates - main.py - 111 +2024-11-12 11:02:57,863 - logger - INFO - robot_app . : get_command_count - main.py - 111 +2024-11-12 11:02:58,897 - logger - INFO - Connect to 0 by SHARED_MEMORY - client_socket.py - 130 +2024-11-12 11:03:01,541 - logger - INFO - not_connected - robot.py - 52 +2024-11-12 11:03:01,850 - logger - INFO - urdf\sample.urdf - client_socket.py - 136 +2024-11-12 11:03:03,896 - logger - INFO - connected - robot.py - 52 diff --git a/main.py b/main.py index 8f099fc..25e2824 100644 --- a/main.py +++ b/main.py @@ -1,5 +1,6 @@ -import json +import os import sys +import json import time import argparse import threading @@ -12,7 +13,17 @@ from logger import logger class MyApp: - with open("./robots.json", "r") as file: + if getattr(sys, 'frozen', False): + # Если приложение собрано в один файл + application_path = os.path.dirname(sys.executable) + else: + # Если приложение запускается как скрипт + application_path = os.path.dirname(os.path.abspath(__file__)) + + # Путь к файлу robots.json + robots_json_path = os.path.join(application_path, 'robots.json') + + with open(robots_json_path, "r") as file: robots = json.load(file) robot_app = None diff --git a/main.spec b/main.spec index dfec135..3c825ca 100644 --- a/main.spec +++ b/main.spec @@ -3,7 +3,7 @@ a = Analysis( ['main.py'], - pathex=['.', 'robot/', 'gui/'], + pathex=['.', './.venv', './.venv/Lib', './.venv/Lib/site-packages', 'robot/', 'gui/'], binaries=[], datas=[('robots.json', '.'), ('urdf', 'urdf'), ('data', 'data')], hiddenimports=['numpy', 'libpython3.10'], diff --git a/pybullet_server.spec b/pybullet_server.spec index e606a82..988c1e4 100644 --- a/pybullet_server.spec +++ b/pybullet_server.spec @@ -3,7 +3,7 @@ a = Analysis( ['utils/pybullet_server.py'], - pathex=[], + pathex=['.', './.venv', './.venv/Lib', './.venv/Lib/site-packages'], binaries=[], datas=[('pyproject.toml', '.'), ('robots.json', '.'), ('urdf', 'urdf'), ('data', 'data')], hiddenimports=['libpython3.10', 'numpy'], diff --git a/robot/client_socket.py b/robot/client_socket.py index c4a1bf0..f7771df 100644 --- a/robot/client_socket.py +++ b/robot/client_socket.py @@ -3,6 +3,7 @@ import json import os import math import numpy as np +import sys from typing import Literal from pprint import pprint @@ -130,9 +131,16 @@ class UrdfManager: logger.info(f"Connect to {self.physics_client} by {type}") def load_models(self): - p.loadURDF("urdf/plane.urdf", physicsClientId=self.physics_client) + if getattr(sys, 'frozen', False): + # Если приложение собрано в один файл + application_path = os.path.dirname(sys.executable) + else: + # Если приложение запускается как скрипт + application_path = os.path.dirname(os.path.abspath(__file__)) + + # p.loadURDF("urdf/plane.urdf", physicsClientId=self.physics_client) - urdf_path = os.path.join("urdf", f"{self.urdf_filename}.urdf") + urdf_path = os.path.join(application_path, "urdf", f"{self.urdf_filename}.urdf") logger.info(urdf_path) self.body_id = p.loadURDF( urdf_path, diff --git a/run.py b/run.py index f84f46d..d9d9c0f 100644 --- a/run.py +++ b/run.py @@ -2,27 +2,39 @@ import subprocess import argparse import sys import signal +import psutil # Параметры для процессов server_process = None test_server_process = None +command_type = 'exe' 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(): +def cleanup(*args): """Функция для остановки серверов при выходе""" + global server_process, test_server_process print("Остановка серверов...") - if server_process: - server_process.terminate() - server_process.wait() - if test_server_process: - test_server_process.terminate() - test_server_process.wait() + terminate_process(server_process) + terminate_process(test_server_process) print("Серверы остановлены.") + sys.exit(0) # Завершение работы после очистки + # Назначаем функции очистки для сигналов signal.signal(signal.SIGINT, lambda *_: cleanup()) @@ -30,14 +42,32 @@ signal.signal(signal.SIGTERM, lambda *_: cleanup()) # Парсер аргументов командной строки parser = argparse.ArgumentParser(description="Python launcher script.") -parser.add_argument("--test", action="store_true", help="Запуск в режиме тестирования") +parser.add_argument( + "--test-socket", action="store_true", help="Запуск в режиме тестирования" +) +parser.add_argument( + "--bullet-gui", action="store_true", help="Вывод визуального pybullet" +) +parser.add_argument( + "--start-py", action="store_true", help="Запуск EXE или PY" +) args = parser.parse_args() +if args.start_py: + command_type = 'local' + +poetry_path = "poetry" + # Установка команды для pybullet_server -pybullet_command = ["./pybullet_server.exe"] # Путь к исполняемому файлу +pybullet_command = [ + poetry_path, + "run", + "python", + "utils/pybullet_server.py", +] if command_type == 'local' else 'pybullet_server.exe' # Если включен режим тестирования, добавляем флаг --test -if args.test: +if args.bullet_gui: pybullet_command.append("--test") # Запуск pybullet_server.exe @@ -50,9 +80,16 @@ if server_process.poll() is not None: sys.exit(1) # Если включен режим тестирования, запускаем test_socket_server.exe -if args.test: +if args.test_socket: print("Запуск test_socket_server...") - test_server_process = subprocess.Popen(["./test_socket_server.exe"]) # Путь к исполняемому файлу + test_server_process = subprocess.Popen( + [ + poetry_path, + "run", + "python", + "utils/test_socket_server.py", + ] if command_type == 'local' else 'test_socket_server.exe' + ) # Путь к исполняемому файлу # Проверка успешного запуска тестового сервера if test_server_process.poll() is not None: @@ -60,10 +97,26 @@ if args.test: sys.exit(1) # Запуск основного скрипта main.exe в режиме тестирования - subprocess.run(["./main.exe", "--mode", "test"]) # Путь к исполняемому файлу + subprocess.run( + [ + poetry_path, + "run", + "python", + "main.py", + "--mode", + "test", + ] if command_type == 'local' else 'main.exe --mode test' + ) # Путь к исполняемому файлу else: # Запуск основного скрипта main.exe - subprocess.run(["./main.exe"]) # Путь к исполняемому файлу + subprocess.run( + [ + poetry_path, + "run", + "python", + "main.py", + ] if command_type == 'local' else 'main.exe' + ) # Путь к исполняемому файлу # Очистка после завершения cleanup() diff --git a/run.spec b/run.spec index 1b109e2..eddf90f 100644 --- a/run.spec +++ b/run.spec @@ -3,7 +3,7 @@ a = Analysis( ['run.py'], - pathex=[], + pathex=['.', './.venv', './.venv/Lib', './.venv/Lib/site-packages'], binaries=[], datas=[('pyproject.toml', '.'), ('robots.json', '.'), ('urdf', 'urdf'), ('data', 'data')], hiddenimports=['libpython3.10'], diff --git a/run_local.py b/run_local.py deleted file mode 100644 index c6e40ce..0000000 --- a/run_local.py +++ /dev/null @@ -1,116 +0,0 @@ -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() diff --git a/test_socket_server.spec b/test_socket_server.spec index 6587eaf..35cf0da 100644 --- a/test_socket_server.spec +++ b/test_socket_server.spec @@ -3,7 +3,7 @@ a = Analysis( ['utils/test_socket_server.py'], - pathex=[], + pathex=['.', './.venv', './.venv/Lib', './.venv/Lib/site-packages'], binaries=[], datas=[('pyproject.toml', '.'), ('robots.json', '.'), ('urdf', 'urdf'), ('data', 'data')], hiddenimports=['libpython3.10'],