2013-02-13 15 views
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() 

के बाद से सत्र उदाहरण कारखाना द्वारा बनाई गई है, मैं नहीं कर पा रहे न सत्र निर्माता है और न ही प्रोटोकॉल के लिए अतिरिक्त args पारित करने में सक्षम हो सकता है। मैंने पहले ही विकल्प नाम वैश्विक बनाने की कोशिश की है लेकिन यह प्रोटोकॉल संदर्भ/दायरे में दिखाई नहीं दे रहा है।

बीटीडब्ल्यू। मैंने प्रोटोकॉल क्लास को अपनी फाइल में ले जाया और इसे मुख्य फाइल में आयात किया।

उत्तर

4

आप अपनी फैक्टरी बना सकते हैं और इसके लिए पैरामीटर पास कर सकते हैं। docs

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() 
+0

नमूना और सूचक के लिए धन्यवाद, यह एक अच्छा प्रारंभिक बिंदु था। दुर्भाग्य से, प्रोटोकॉल उदाहरण सत्र में बनाया गया है, लेकिन इसका प्रोटोकॉल.session.conn.transport.factory.quote के माध्यम से उपयोग है। – Fabian

+0

ओपनशेल कॉल के भीतर हम सर्वर के प्रोटोकॉल = सर्वरप्रोटोकॉल (कमांडरैकलाइन, स्वयं, उद्धरण) के माध्यम से कमांडरैकलाइन पर उद्धरण अग्रेषित कर सकते हैं। – Fabian

संबंधित मुद्दे