2009-12-13 14 views
19

Pracuję nad uczeniem się Twisted i natknąłem się na coś, czego nie jestem pewien, czy strasznie lubię - "Twisted Command Prompt". Ja fiddling ze skręconymi na moim komputerze z systemem Windows, i próbowali uruchamiając „chat” Przykład:Jak uruchamiasz aplikację Twisted przez Python (zamiast poprzez Twisted)?

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) 

Jednak, aby uruchomić tę aplikację jako serwer Twisted, muszę go uruchomić poprzez „wierszem Twisted komenda” z poleceniem:

twistd -y chatserver.py 

jest jakiś sposób aby zmienić kod (ustawiający Twisted ustawień konfiguracyjnych, etc), tak, że mogę po prostu go uruchomić poprzez:

python chatserver.py 

Skończyłem googled, bu t wyszukiwane terminy wydają się zbyt niejasne, aby zwrócić jakiekolwiek sensowne odpowiedzi.

Dzięki.

Odpowiedz

22

Nie wiem, czy to najlepszy sposób, aby to zrobić, ale co mogę zrobić, to zamiast:

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

można zrobić:

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

Sumarized jeśli chcesz mieć dwie opcje (twistd i 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) 

Mam nadzieję, że pomoże!

+0

To było DOKŁADNIE to, czego szukałem. Dzięki za tonę. –

+0

W nowszych wersjach Twisted powinieneś raczej używać punktów końcowych zamiast bezpośrednio wywoływać metody reaktora. W tym przykładzie zamień linię "listenTCP" na . Jest to bardziej elastyczne, ponieważ możesz ominąć punkty końcowe, niekoniecznie je uruchamiając. W nowszych wersjach Twisted będzie coraz więcej narzędzi do pracy z punktami końcowymi, więc jest to trochę bardziej przyszłościowe. – Glyph

+0

Co z wdrażaniem tego pakietu przy użyciu pakietu. Idealnie chciałbym uruchomić mój serwer za pomocą pojedynczego polecenia po zainstalowaniu go w virtualenv. Jaki jest zalecany sposób wysłania skryptu serwera wraz z pakietem? – Chris

1

Nie używałem tego samego. Możesz jednak sprawdzić, czy twistd jest plikiem pythonowym. Zgaduję, że to po prostu zarządza ładowaniem odpowiednich skręconych bibliotek z właściwej ścieżki.

2

W oknach można utworzyć plik .bat za pomocą komendy, użyć pełnych ścieżek, a następnie kliknąć, aby uruchomić.

Na przykład używam:

runfileserver.bat: 
C:\program_files\python26\Scripts\twistd.py -y C:\source\python\twisted\fileserver.tac 
+0

Ten plik, twistd.py, wydaje się bardzo mały.Czy istnieje sposób na uwzględnienie tego na początku aplikacji, aby można go było uruchomić za pomocą zwykłego programu python exe? –

15

Nie należy mylić "Twisted" z "twistd". Gdy używasz "twistd", jesteś uruchomienie programu z Python. "twistd" to program w języku Python, który między innymi może załadować aplikację z pliku .tac (tak jak tu robisz).

"Skręcony wiersz polecenia" to wygodna pomoc dla Twisted, która pomaga ludziom w systemie Windows. Jedyne, co robi to ustawienie %PATH%, aby zawrzeć katalog zawierający program "twistd". Możesz uruchomić polecenie twistd z normalnego wiersza polecenia, jeśli ustawisz% PATH% poprawnie lub wywołasz go z pełną ścieżką.

Jeśli nie jesteś z tego zadowolony, być może możesz rozszerzyć swoje pytanie, dołączając opis problemów, które występują podczas korzystania z "twistd".

2

Może jeden z modułów run lub runApp w zadziała. Proszę dać mi znać, jeśli tak, to będzie miło wiedzieć!

Powiązane problemy