0

私は現在、作業中のロボットを制御できる Web アプリケーションに取り組んでいます。何らかの理由で、Pyro を正しく動作させることができません。すべてが機能しているように見えますが (エラーはありません)、Web ページのボタンをクリックしても「サーバー」のメソッドが呼び出されません。

ここに私の「サーバーコード」があります:

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() クラスがセットアップされていることはわかっていますが、他のメソッドはどれも出力を書き込んでいません。

Webページが呼び出す「クライアントコード」は次のとおりです。

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]

robot が URI に設定されており、parameters 変数に正しい情報が含まれていることは既に確認済みです。そして、コードは必要に応じて「if」ステートメントに流れています。しかし、Robot() クラスでセットアップが呼び出された後は、どのメソッドも呼び出されません。誰にもアイデアはありますか?

4

1 に答える 1

0

サポートが終了した Pyro バージョン 3 を使用しているようです。最後のリリースは 3 年前です。可能であれば、Pyro4 にアップグレードすることをお勧めしますか?

于 2015-04-18T17:51:47.440 に答える