Comment exécuter une application twistée via Python (au lieu de via Twisted)?

je travaille mon chemin à travers L'apprentissage tordu, et ont trébuché sur quelque chose que je ne suis pas sûr d'aimer terriblement - le "Prompt de commande tordu". Je tripote avec Twisted sur ma machine Windows, et j'ai essayé de lancer l'exemple "Chat":

from twisted.protocols import basic

class MyChat(basic.LineReceiver):
    def connectionMade(self):
        print "Got new client!"
        self.factory.clients.append(self)

    def connectionLost(self, reason):
        print "Lost a client!"
        self.factory.clients.remove(self)

    def lineReceived(self, line):
        print "received", repr(line)
        for c in self.factory.clients:
            c.message(line)

    def message(self, message):
        self.transport.write(message + 'n')


from twisted.internet import protocol
from twisted.application import service, internet

factory = protocol.ServerFactory()
factory.protocol = MyChat
factory.clients = []

application = service.Application("chatserver")
internet.TCPServer(1025, factory).setServiceParent(application)

Cependant, pour exécuter cette application comme un serveur tordu, je dois l'exécuter via l'invite de commande "Twisted Command Prompt", avec la commande:

twistd -y chatserver.py

y a-t-il un moyen de changer le code (définir la configuration torsadée) paramètres, etc) pour que je puisse simplement l'exécuter via:

python chatserver.py

j'ai cherché sur Google, mais les termes de recherche semblent être trop vagues pour retourner des réponses significatives.

Merci.

19
demandé sur Mike Trpcic 2009-12-14 01:03:32

5 réponses

je ne sais pas si c'est la meilleure façon de le faire, mais ce que je fais est à la place de:

application = service.Application("chatserver")
internet.TCPServer(1025, factory).setServiceParent(application)

vous pouvez faire:

from twisted.internet import reactor
reactor.listenTCP(1025, factory)
reactor.run()

Sumarized si vous voulez avoir les deux options (twistd et python):

if __name__ == '__main__':
    from twisted.internet import reactor
    reactor.listenTCP(1025, factory)
    reactor.run()
else:
    application = service.Application("chatserver")
    internet.TCPServer(1025, factory).setServiceParent(application)

j'Espère que ça aide!

22
répondu chaos.ct 2009-12-13 23:25:31

ne confondez pas" tordu "avec"twistd". Lorsque vous utilisez "twistd", vous lancer le programme avec Python. "twistd " est un programme Python qui, entre autres choses, peut charger une application à partir d'un .tac fichier (que vous êtes en train de faire ici).

le" Twisted Command Prompt " est un utilitaire fourni par l'installateur Twisted pour aider les gens sur Windows. Tout c'est fait, c'est la configuration de %PATH% pour inclure le répertoire contenant les "twistd" du programme. Vous pouvez exécuter twistd à partir d'une invite de commande normale si vous définissez correctement votre %PATH% ou l'invoquez avec le chemin complet.

si vous n'êtes pas satisfait de cela, vous pouvez peut-être élargir votre question pour inclure une description des problèmes que vous rencontrez en utilisant "twistd".

15
répondu Jean-Paul Calderone 2011-03-31 00:11:52

Sur windows, vous pouvez créer .bat file avec votre commande, utilisez full paths, puis cliquez dessus pour démarrer.

Par exemple j'utilise:

runfileserver.bat:
C:\program_files\python26\Scripts\twistd.py -y C:\source\python\twisted\fileserver.tac
2
répondu stefanB 2009-12-13 22:23:27

peut-être un de run ou runApptordu.script.twistd les modules fonctionneront pour vous. S'il vous plaît laissez-moi savoir si il le fait, il sera agréable de savoir!

2
répondu Alok Singhal 2009-12-13 23:11:57

Je n'ai pas utilisé twisted moi-même. Cependant, vous pouvez essayer de voir si le twistd est un fichier python lui-même. Je suppose qu'il s'agit simplement de gérer le chargement des bibliothèques déformées appropriées à partir du bon chemin.

1
répondu frogstarr78 2009-12-13 22:11:15