tutorial traduccion serie recetas meaning food python twisted

python - traduccion - Cómo escribir un plugin Twisted client



twisted serie (3)

He usado twisted para implementar un cliente. Funciona bien. Ahora quiero poder pasarle argumentos de línea de comando, así que necesito implementar un plugin twisted . Realicé muchas búsquedas para encontrar recursos que mostrarían cómo convertir el programa a un complemento. Sin embargo, no pude encontrar exactamente lo que estaba buscando.

Aquí hay una parte relacionada de mi código client.py :

import sys import time import os import errno import re from stat import * global runPath runPath = ''/home/a02/Desktop/'' from twisted.python import log from GlobalVariables import * from twisted.internet import reactor, threads, endpoints from time import sleep from twisted.internet.protocol import ClientFactory# , Protocol from twisted.protocols import basic import copy class MyChat(basic.LineReceiver): def connectionMade(self): print "Connected to the server!" EchoClientFactory.buildClientObject(self.factory, self) self.runPythonCommands = RunPythonCommands () return def connectionLost(self, reason): print "Lost Connection With Server!" #self.factory.clients.remove(self) #self.transport.loseConnection() print ''connection aborted!'' #reactor.callFromThread(reactor.stop) reactor.stop () return def lineReceived(self, line): #print "received", repr(line) line = line.strip () if line == "EOF": print "Test Completed" self.factory.getLastReceivedMsg (line) exeResult = self.runPythonCommands.runPythonCommand(line.strip()) self.sendLine(exeResult) EchoClientFactory.lastReceivedMessage = "" EchoClientFactory.clientObject[0].receivedMessages = [] return def message (self, line): self.sendLine(line) #print line return class EchoClientFactory(ClientFactory): protocol = MyChat clientObject = [] lastReceivedMessage = '''' def buildClientObject (self, newClient): client = Client () self.clientObject.append(client) self.clientObject[0].objectProtocolInstance = newClient return def getLastReceivedMsg (self, message): self.lastReceivedMessage = message self.clientObject [0].lastReceivedMsg = message self.clientObject[0].receivedMessages.append (message) return def connectionLost (self): reactor.stop() return def clientConnectionFailed(self, connector, reason): print ''Connection failed. Reason:'', reason connector.connect () return

Esto es lo que escribí para mi client_plugin.py :

from zope.interface import implements from twisted.python import usage from twisted.plugin import IPlugin from twisted.application.service import IServiceMaker from twisted.application.internet import TCPServer from twisted.spread import pb from slave.client import EchoClientFactory,MyChat, Client, RunPythonCommands, MyError, line class Options(usage.Options): optParameters = [["port", "p", 8789, "The port number to listen on."], ["host", "h", "192.168.47.187", "The host to connect to"]] class MyServiceMaker(object): implements(IServiceMaker, IPlugin) tapname = "echoclient" description = "Echo Client" options = Options def makeService(self, options): clientfactory = pb.PBServerFactory(EchoClientFactory ()) return TCPServer(options["host"],int(options["port"]), clientfactory) serviceMaker = MyServiceMaker()

He usado la misma jerarquía de carpetas mencionada en la documentación. Como no he podido encontrar suficientes ejemplos de complementos en la web, estoy realmente atascado en este punto. Apreciaría cualquier ayuda. ¿Alguien podría decirme cómo cambiar el código? Gracias de antemano.



Simplemente siga estos enlaces para obtener documentos y ayuda:

twistedmatrix - documentos

twisted.readthedocs.io -docs

from __future__ import print_function from twisted.internet import reactor from twisted.web.client import Agent from twisted.web.http_headers import Headers agent = Agent(reactor) d = agent.request( ''GET'', ''http://example.com/'', Headers({''User-Agent'': [''Twisted Web Client Example'']}), None) def cbResponse(ignored): print(''Response received'') d.addCallback(cbResponse) def cbShutdown(ignored): reactor.stop() d.addBoth(cbShutdown) reactor.run()

Salida:

C:/Python27>python.exe twist001.py Response received


MyServiceMaker().makeService devolver un objeto de servicio principal desde su MyServiceMaker().makeService . Intente agregar from twisted.internet import service luego en makeService agregue esto al principio: top_service = service.Multiservice() Cree el servicio tcp_service = TCPServer(...) : tcp_service = TCPServer(...) al servicio superior: tcp_service.setServiceParent(top_service) A continuación, devuelva el servicio superior: return top_service

También puede que necesite echar un vistazo a esta excelente serie de tutoriales de Dave Peticolas (el artículo n ° 16 es el que es útil para su problema)