В настоящее время я работаю над веб-приложением, которое может управлять роботом, над которым я работаю. По какой-то причине я не могу заставить Pyro работать правильно. Кажется, что все работает (без ошибок), но методы на «сервере» никогда не вызываются, когда я нажимаю кнопку на веб-странице.Pyro & WSGI Raspberry Pi
Вот мой «серверный код»:
import Pyro.core
import Pyro.naming
from rrb2 import *
class Robot(Pyro.core.ObjBase):
def _setup(self):
rr = RRB2()
print "SETUP"
def ledOneOn():
rr.set_led1(1)
print "LED ONE ONE"
def ledOneOff():
rr.set_led1(0)
print "LED ONE OFF"
def ledTwoOn():
rr.set_led2(1)
print "LED TWO ON"
def ledTwoOff():
rr.set_led2(0)
print "LED TWO OFF"
def forward():
rr.forward()
print "FORWARD"
def stop():
rr.stop()
print "STOP"
def __init__(self):
Pyro.core.ObjBase.__init__(self)
self._setup()
if __name__ == "__main__":
# Create a Pyro server and register our module with it
Pyro.core.initServer()
ns = Pyro.naming.NameServerLocator().getNS()
daemon = Pyro.core.Daemon()
daemon.useNameServer(ns)
uri = daemon.connect(Robot(),"robot")
daemon.requestLoop()
Я знаю, что класс Robot() в настоящее время установки, потому что я вижу выход, но ни один из других методов не пишет выход.
Вот мой «клиент-код», что веб-страница называет:
import Pyro.core
from cgi import parse_qs
def application(environ, start_response):
robot = Pyro.core.getProxyForURI("PYRONAME://robot")
parameters = parse_qs(environ['QUERY_STRING'])
if 'command' in parameters:
command = parameters['command'][0]
if 'command' == 'ledOneOn':
robot.ledOneOn()
elif 'command' == 'ledTwoOn':
robot.ledTwoOn()
status = '200 OK'
else:
status = '400 Bad Request'
response_headers = [('Content-type', 'text/plain'), ('Content-Length', str(len(status)))]
start_response(status, response_headers)
return [status]
Я уже проверил, что робот устанавливается в URI и переменные параметры содержит правильную информацию. И код перетекает в операторы if. Но после того, как настройка вызывается в классе Robot(), ни один из методов не вызывается. У кого-нибудь есть идеи?
Вы регистрируете исключения на сервере? Имеет ли серверный процесс права пользователя для установки контактов GPIO? –
Да, я регистрирую их через Apache, и я не вижу их. Скрипты работают как система. Я их начал с помощью rc.local. – QuantumPhysGuy