2009-12-13 68 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模块之一将为你工作。请让我知道如果它,这将是很高兴知道!

相关问题