fix: working dir error when input config path

feat: report publish topic when error
This commit is contained in:
Xuwznln
2025-08-04 14:04:31 +08:00
parent 46aa7a7bd2
commit 343f394203
2 changed files with 11 additions and 10 deletions

View File

@@ -171,6 +171,8 @@ def main():
"error", "error",
) )
os._exit(1) os._exit(1)
elif config_path and os.path.exists(config_path):
working_dir = os.path.dirname(config_path)
elif os.path.exists(working_dir) and os.path.exists(os.path.join(working_dir, "local_config.py")): elif os.path.exists(working_dir) and os.path.exists(os.path.join(working_dir, "local_config.py")):
config_path = os.path.join(working_dir, "local_config.py") config_path = os.path.join(working_dir, "local_config.py")
elif not config_path and ( elif not config_path and (

View File

@@ -180,42 +180,41 @@ class PropertyPublisher:
def get_property(self): def get_property(self):
if asyncio.iscoroutinefunction(self.get_method): if asyncio.iscoroutinefunction(self.get_method):
# 如果是异步函数,运行事件循环并等待结果 # 如果是异步函数,运行事件循环并等待结果
self.node.get_logger().debug(f"【PropertyPublisher.get_property】获取异步属性: {self.name}") self.node.lab_logger().debug(f"【PropertyPublisher.get_property】获取异步属性: {self.name}")
loop = self.__loop loop = self.__loop
if loop: if loop:
future = asyncio.run_coroutine_threadsafe(self.get_method(), loop) future = asyncio.run_coroutine_threadsafe(self.get_method(), loop)
self._value = future.result() self._value = future.result()
return self._value return self._value
else: else:
self.node.get_logger().error(f"【PropertyPublisher.get_property】事件循环未初始化") self.node.lab_logger().error(f"【PropertyPublisher.get_property】事件循环未初始化")
return None return None
else: else:
# 如果是同步函数,直接调用并返回结果 # 如果是同步函数,直接调用并返回结果
self.node.get_logger().debug(f"【PropertyPublisher.get_property】获取同步属性: {self.name}") self.node.lab_logger().debug(f"【PropertyPublisher.get_property】获取同步属性: {self.name}")
self._value = self.get_method() self._value = self.get_method()
return self._value return self._value
async def get_property_async(self): async def get_property_async(self):
try: try:
# 获取异步属性值 # 获取异步属性值
self.node.get_logger().debug(f"【PropertyPublisher.get_property_async】异步获取属性: {self.name}") self.node.lab_logger().debug(f"【PropertyPublisher.get_property_async】异步获取属性: {self.name}")
self._value = await self.get_method() self._value = await self.get_method()
except Exception as e: except Exception as e:
self.node.get_logger().error(f"【PropertyPublisher.get_property_async】获取异步属性出错: {str(e)}") self.node.lab_logger().error(f"【PropertyPublisher.get_property_async】获取异步属性出错: {str(e)}")
def publish_property(self): def publish_property(self):
try: try:
self.node.get_logger().debug(f"【PropertyPublisher.publish_property】开始发布属性: {self.name}") self.node.lab_logger().debug(f"【PropertyPublisher.publish_property】开始发布属性: {self.name}")
value = self.get_property() value = self.get_property()
if self.print_publish: if self.print_publish:
self.node.get_logger().info(f"【PropertyPublisher.publish_property】发布 {self.msg_type}: {value}") self.node.lab_logger().info(f"【PropertyPublisher.publish_property】发布 {self.msg_type}: {value}")
if value is not None: if value is not None:
msg = convert_to_ros_msg(self.msg_type, value) msg = convert_to_ros_msg(self.msg_type, value)
self.publisher_.publish(msg) self.publisher_.publish(msg)
self.node.get_logger().debug(f"【PropertyPublisher.publish_property】属性 {self.name} 发布成功") self.node.lab_logger().debug(f"【PropertyPublisher.publish_property】属性 {self.name} 发布成功")
except Exception as e: except Exception as e:
traceback.print_exc() self.node.lab_logger().error(f"【PropertyPublisher.publish_property】发布属性 {self.publisher_.topic} 出错: {str(e)}\n{traceback.format_exc()}")
self.node.get_logger().error(f"【PropertyPublisher.publish_property】发布属性出错: {str(e)}")
def change_frequency(self, period): def change_frequency(self, period):
# 动态改变定时器频率 # 动态改变定时器频率