Python 将参数传递给twisted factory以传递给会话
我已经基于twisted sshsimpleserver.py编写了一个sshdaemon,效果非常好 但是我现在想向EchoProtocol传递一个命令行参数,根据参数改变它的行为。 我该怎么做?在这种情况下,我想通过考试 “options.test”参数添加到我的协议中Python 将参数传递给twisted factory以传递给会话,python,twisted,Python,Twisted,我已经基于twisted sshsimpleserver.py编写了一个sshdaemon,效果非常好 但是我现在想向EchoProtocol传递一个命令行参数,根据参数改变它的行为。 我该怎么做?在这种情况下,我想通过考试 “options.test”参数添加到我的协议中 [...] if __name__ == '__main__': parser = optparse.OptionParser() parser.add_option('-p', '--port',
[...]
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()
由于会话实例是由工厂创建的,因此我似乎无法
不能将其他参数传递给会话构造函数或协议。
我已经尝试将选项名设置为全局,但在协议上下文/范围中不可见
顺便说一句,我将protocol类移动到它自己的文件中,并将其导入主文件。您可以创建自己的工厂并将参数传递给它。请参见中的示例
感谢您提供的示例和指针,这是一个很好的起点。不幸的是,该协议是在ExampleSession中创建的,但它可以通过protocol.session.conn.transport.factory.quote进行访问。在openShell调用中,我们可以通过serverProtocol=serverProtocol(CommandRecvLine,self,quote)将报价转发给CommandRecvLine
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()