python twisted简单客户端 - 服务器通信

时间:2012-10-06 15:40:01

标签: python client twisted irc

尝试使用简单的python twisted客户端 - 服务器应用程序正常工作。目的是用它来控制一些IRC机器人;像一个主控制台向所有(5)机器人发出命令。

有一天,附加的代码将形成服务器代码。目前,我正在使用telnet来模拟连接到“派对线”的IRC机器人(客户端)。

我所坚持的是,我如何从附加的服务器应用程序中将sendLine发送到所有机器人?每次我创建一个循环来获取raw_input时,我最终都会停止执行。我考虑过针对连接状态函数进行测试,但似乎无法找到(如果连接为true,则为raw_input类逻辑)。

from twisted.internet.protocol import Factory
from twisted.protocols.basic import LineReceiver
from twisted.internet import reactor

class bottalk(LineReceiver):

    botlist = []

    def lineReceived(self, line):
        botlistspot = len(self.botlist)
        self.botlist.append(line)
        print self.botlist[botlistspot] + " checked in."

class botfactory(Factory):

    def buildProtocol(self, addr):
        return bottalk()

reactor.listenTCP(8123, botfactory())
reactor.run() 

我尝试将以下raw_input放在LineReceiver类的外部。全部..我希望这个raw_input提示不断提示输入,而不是仅仅在收到一行之类的事件之后 - 所有时间..我希望服务器机器人控制台随时准备接受我的输入并将sendLine传递给所有机器人。 / p>

sendLine(raw_input("> "))

1 个答案:

答案 0 :(得分:2)

根本不要使用raw_input。相反,实例化stdio.StandardIO,为其构造函数提供LineReceiver子类的实例。只要在lineReceived上有新行,就会调用您在子类中定义的stdin,然后您可以将其广播到机器人。

This example from the Twisted site证明了这个想法。