【やっつけ】CGIHTTPServer.test()でウェブサーバを立ち上げるROSのノードを作る
Mon Nov 21 14:41:34 JST 2016 (modified: Fri Sep 29 21:38:45 JST 2017)
views: 2254, keywords:Python,ROS この記事は最終更新日が7年以上前のものです。
もっと簡単な方法があれば教えてくださーい
やりたいこと
roslaunchでウェブサーバを立ち上げたい。roslaunchを終わらせたらウェブサーバを落としたい。
やり方
次のようなスクリプトwebserver.pyを書いて、scriptsディレクトリに置く。
#!/usr/bin/env python
import rospy, os
import CGIHTTPServer
def kill():
"kill -KILL " + str(os.getpid()))
os.system(
__file__))
os.chdir(os.path.dirname("webserver")
rospy.init_node(
rospy.on_shutdown(kill) CGIHTTPServer.test()
launchファイルにノードを次のように書く。
<launch>
<node pkg="hoge_webserver" name="webserver" type="webserver.py" required="true" args="8080" />
</launch>
解説
スクリプト中のkillは、自分自身のプロセスをぶっ殺す関数で、CGIHTTPServer.test()もろともシステムから消し去ります。これがないと、CGIHTTPServer.test()のスレッド(?)が死にません。
また、roslaunchからこのノードを立ち上げると、システムのディレクトリがドキュメントルートになるので、8行目でディレクトリをscriptsに変更しています。
また、roslaunchからwebserver.pyを立ち上げると引数に余計なものが入るので、ローンチファイルでwebserver.pyに指定する引数をargs="8080"と明示的に指定しています。
以上。