2015-01-15 5 views
0

В настоящее время я работаю над веб-приложением, которое может управлять роботом, над которым я работаю. По какой-то причине я не могу заставить 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(), ни один из методов не вызывается. У кого-нибудь есть идеи?

+0

Вы регистрируете исключения на сервере? Имеет ли серверный процесс права пользователя для установки контактов GPIO? –

+0

Да, я регистрирую их через Apache, и я не вижу их. Скрипты работают как система. Я их начал с помощью rc.local. – QuantumPhysGuy

ответ

0

Кажется, что вы используете более не поддерживаемую Pyro версию 3. Его последняя версия была 3 года назад. Могу ли я посоветовать обновить до Pyro4, если можно?

 Смежные вопросы

  • Нет связанных вопросов^_^