1

我有以下 Python 程序来启动 HTTP 服务器和 ROS 节点。

httpd = ThreadingHttpServer()

rospy.init_node('server')
rospy.on_shutdown(httpd.shutdown)

try:
    httpd.serve_forever()
except KeyboardInterrupt:
    pass

httpd.server_close()

我希望程序终止

  • 当我打电话时httpd.shutdown()(例如在收到/kill命令后),
  • 当 ROS 关闭时(即 if rospy.is_shutdown())和
  • 当我按下时Ctrl+C(这是最不重要的)。

不知何故,我正在努力识别 ROS 关闭,即使我尝试rospy.on_shutdown()了自己的while循环调用httpd.handle_request()

在当前版本中,节点(以 开头rosrun)在关闭时不会停止roscore

如何合理地组合这两个模块?

4

1 回答 1

1

我相信您可以通过在(或您自己的调用它的函数)上将套接字关闭函数注册为 rospy 关闭处理程序来停止。

   def shutdown_hook():
       print "Trying to shut down server"
       httpd.shutdown()

   rospy.on_shutdown(shutdown_hook)

如果shutdown()不起作用,请尝试httpd.socket.close()

于 2015-09-15T03:11:49.793 回答