2009-12-13 79 views
19

我正在通過學​​習Twisted工作,並且偶然發現了一些我不確定我非常喜歡的東西 - 「Twisted Command Prompt」。我在我的Windows機器上擺弄周圍的扭曲,並試圖運行「聊天」的例子:你如何通過Python運行Twisted應用程序(而不是通過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) 

然而,運行此應用程序作爲一個扭曲的服務器,我已經通過了「扭曲的命令提示符」來運行它,用命令:

twistd -y chatserver.py 

有沒有辦法更改代碼(集扭曲配置設置等),這樣我可以簡單地通過運行它:

python chatserver.py 

我GOOGLE了,BU搜索條件似乎過於模糊,無法回覆任何有意義的迴應。

謝謝。

回答

22

我不知道這是否是做到這一點的最好辦法,但我做的是不是:

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

,你可以這樣做:

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

Sumarized,如果你想擁有兩個選項(twistd來和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) 

希望它能幫助!

+0

這完全是我在找的東西。萬分感謝。 – 2009-12-13 23:53:12

+0

在更新版本的Twisted中,通常應該使用端點而不是直接調用reactor方法。在此示例中,將'listenTCP'行替換爲。這更加靈活,因爲您可以傳遞端點而不必啓動端點。在更新版本的Twisted中,將會有越來越多的工具可以用於端點工作,所以它更具前瞻性。 – Glyph 2010-09-21 20:10:00

+0

如何在你的軟件包中部署它。理想情況下,我想在virtualenv中安裝一個命令後啓動我的服務器。推薦您的服務器腳本以及您的軟件包的推薦方式是什麼? – Chris 2016-02-03 15:17:43

1

我沒有使用扭曲自己。但是,您可能會嘗試查看twistd是否是Python文件本身。我會猜測它只是簡單地從正確的路徑中加載合適的扭曲庫。

2

在windows上,你可以用你的命令創建.bat文件,使用完整路徑,然後點擊它啓動。

例如筆者使用的:

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

該文件twistd.py看起來很小。有沒有什麼辦法可以在應用程序的開始部分包含它,以便我可以通過常規的python exe運行它? – 2009-12-13 22:47:37

15

不要混淆 「扭曲」 與 「twistd」。當你使用「twistd」時,你的用Python運行程序。 「twistd」是一個Python程序,它可以從.tac文件加載應用程序(正如您在此處所做的那樣)。

「Twisted Command Prompt」是Twisted安裝程序 - 爲Windows上的人員提供便利。它所做的只是將%PATH%設置爲包含包含「twistd」程序的目錄。如果正確設置%PATH%或使用完整路徑調用它,則可以從常規命令提示符運行twistd。

如果您對此不滿意,也許您可​​以擴展您的問題,以包括使用「twistd」時遇到的問題的描述。

2

也許runrunApptwisted.scripts.twistd模塊之一將爲你工作。請讓我知道如果它,這將是很高興知道!

相關問題