2011-06-01 10 views
6

Estoy intentando escribir un programa que tenga clientes conectados mientras el servidor todavía puede enviar comandos a todos los clientes. Estoy usando la solución "Twisted". ¿Cómo puedo hacer esto? Aquí está el código que tengo hasta ahora (entiendo que Twisted ya utiliza sockets no bloqueantes):Recibir entrada de línea de comando mientras escucha conexiones en Python

import threading 
print 'threading.' 

def dock(): 
    try: 
     from twisted.internet.protocol import Factory, Protocol 
     from twisted.internet import reactor 
     import currentTime 
     print '[*]Imports succesful.' 
    except: 
     print '[/]Imports failed.' 

    #Define the class for the protocol 
    class Master(Protocol): 
     command = raw_input('> ') 
     def connectionMade(self): 
      print 'Slave connected.' 
      print currentTime.getTime() #Print current time 
      #self.transport.write("Hello") 

     def connectionLost(self, reason): 
      print 'Lost.' 
    #Assemble it in a "factory" 

    class MasterFactory(Factory): 
     protocol = Master 


    reactor.listenTCP(8800, MasterFactory()) 

    #Run it all 
    reactor.run() 

def commandline(): 
    raw_input('>') 

threading.Thread(target=dock()).start() 
threading.Thread(target=commandline()).start() 

Respuesta

6

Puesto que usted ya está usando trenzado, también se debe utilizar para la parte de la consola, en lugar de utilizar raw_input en un hilo.

El bucle de eventos de Twisted puede monitorear cualquier descriptor de archivo para cambios, incluida la entrada estándar, para que pueda obtener devoluciones de llamada basadas en eventos en una nueva línea ingresada - Funciona de forma asíncrona sin necesidad de hilos.

He encontrado este example of a interactive console in a twisted application, quizás pueda usarlo.

+0

el enlace está muerto, ¿podría proporcionar uno que funcione? – alex

+0

@alex http://luoqq.blogspot.com.br/2012/01/song-for-lovers-twisted-interactive.html – nosklo

+0

'.com.br' tiene ejemplos de código ilegibles para mí. Pero el archivo web de [www.oluyede.org/blog/2008/08/31/twisted-interactive-console](http://web.archive.org/web/20091227070520/http://www.oluyede.org/ blog/2008/08/31/twisted-interactive-console) funciona – jfs

Cuestiones relacionadas