Go to the documentation of this file.00001 
00002 
00003 
00004 
00005 import cgi, cgitb
00006 import os
00007 import pexpect
00008 import time
00009 cgitb.enable()
00010 
00011 import popen2
00012 
00013 
00014 print "Content-type: text/html"
00015 print
00016 
00017 print "RESULT"
00018 
00019 ros_distro = "ROS_DISTRO" 
00020 
00021 form = cgi.FieldStorage()
00022 message = form.getvalue("action", "NO_ACTION")
00023 
00024 def run(fun):
00025     out = ""
00026     v = popen2.popen4(fun)
00027     for i in v[0]:
00028         out = out + i
00029     return out
00030 
00031 def run_as_robot(command):
00032     run = "su applications -c \"" + command + "\""
00033     
00034     child = pexpect.spawn(run)
00035     result = child.expect(["ssword:", "(yes/no)?"])
00036     child.sendline("willow")
00037     out = ""
00038     for i in child.readlines():
00039         out = out + i
00040     return out
00041 
00042 
00043 
00044 if (message == "GET_STATE"):
00045     print "USERS"
00046     active_user = "(UNKNOWN)"
00047     dead_users = ""
00048     message = ""
00049     for i in run("robot users --no-plist").split("\n"):
00050         if (i.find("Active User:") != -1):
00051             active_user = i.split(":")[1].strip()
00052         if (i.find("Message:") != -1):
00053             message = i.split(":")[1].strip()
00054         if (i.find("*") != -1):
00055             dead_users = dead_users + i[i.find("*") + 1:i.find("(")].strip() + ","
00056 
00057     
00058     
00059     
00060     
00061     if (active_user == "applications"):
00062         print "STATE_VALID"
00063     elif (active_user == "" or active_user == "None"):
00064         print "STATE_OFF"
00065     else:
00066         print "STATE_IN_USE"
00067         print "USER:", active_user
00068         if (message != ""):
00069             print "MESSAGE:", message 
00070 
00071     
00072     
00073     
00074     
00075     
00076     
00077     
00078     
00079     
00080 
00081     print
00082 elif (message == "STOP_ROBOT"):
00083     print "STOPPING_ROBOT"
00084     result = run_as_robot("yes | robot claim -m 'stopping the robot' ; yes | robot stop ; yes | robot release")
00085     print result
00086     print "DONE"
00087 elif (message == "START_ROBOT"):
00088     print "STARTING_APP_MAN"
00089     print run_as_robot("yes | robot claim -m 'running applications platform'")
00090     print run_as_robot(". /opt/ros/" + ros_distro + "/setup.bash ; . ~/.bashrc ; export ROS_ENV_LOADER=/opt/ros/" + ros_distro + "/env.sh ; nohup roslaunch pr2_app_manager whole_pr2_apps.launch > ~/run.txt &")
00091     
00092     import socket
00093     s = socket.socket()
00094     connect = 0
00095     
00096     while connect < 30:
00097         try:
00098             s.connect(('localhost', 11311))
00099             connect = 30
00100             s.close()
00101         except:
00102             time.sleep(1)
00103             connect += 1
00104     print "DONE"
00105 else:
00106     print "REJECT_COMMAND"
00107     print "action = STOP_ROBOT,START_ROBOT,GET_STATE"
00108