我有下面的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关闭时(即如果
rospy.is_shutdown()
)和 - 当我按Ctrl+C(这是最不重要的)。
不知何故,我正在努力识别ROS关闭,即使我尝试了rospy.on_shutdown()
和自己的while
循环调用httpd.handle_request()
。
在当前版本中,节点(以rosrun
启动)在关闭roscore
时不会停止。
如何合理地结合这两个模块?
我相信您可以通过在调用它的函数上注册套接字close函数作为一个rospy关闭处理程序来停止。
def shutdown_hook():
print "Trying to shut down server"
httpd.shutdown()
rospy.on_shutdown(shutdown_hook)
如果shutdown()
不工作,尝试httpd.socket.close()