5

うまく機能するねじれた sshsimpleserver.py に基づいて sshdaemon を作成しました。

http://twistedmatrix.com/documents/current/conch/examples/

しかし、コマンドライン引数を EchoProtocol に渡し、引数に応じて動作を変更したいと考えています。これどうやってするの?この場合、「options.test」パラメーターをプロトコルに渡したいと思います。

[...]

if __name__ == '__main__':
     parser = optparse.OptionParser()
     parser.add_option('-p', '--port', action = 'store', type = 'int', 
dest = 'port', default = 1235, help = 'server port')
     parser.add_option('-t', '--test', action = 'store', type = 
'string', dest = 'test', default = '123')
     (options, args) = parser.parse_args()

     components.registerAdapter(ExampleSession, ExampleAvatar, 
session.ISession)

     [...]

     reactor.listenTCP(options.port, ExampleFactory())
     reactor.run()

セッション インスタンスはファクトリによって作成されるため、追加の引数をセッション コンストラクターにもプロトコルにも渡すことができないようです。オプション名をグローバルにしようとしましたが、プロトコル コンテキスト/スコープでは表示されません。

ところで。プロトコル クラスを独自のファイルに移動し、メイン ファイルにインポートしました。

4

1 に答える 1

4

独自のファクトリを作成し、それにパラメータを渡すことができます。ドキュメントの例を参照してください

from twisted.internet.protocol import Factory, Protocol
from twisted.internet.endpoints import TCP4ServerEndpoint
from twisted.internet import reactor

class QOTD(Protocol):

    def connectionMade(self):
        # self.factory was set by the factory's default buildProtocol:
        self.transport.write(self.factory.quote + '\r\n')
        self.transport.loseConnection()


class QOTDFactory(Factory):

    # This will be used by the default buildProtocol to create new protocols:
    protocol = QOTD

    def __init__(self, quote=None):
        self.quote = quote or 'An apple a day keeps the doctor away'

endpoint = TCP4ServerEndpoint(reactor, 8007)
endpoint.listen(QOTDFactory("configurable quote"))
reactor.run()
于 2013-02-15T13:40:03.010 に答える