1

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

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

我坚持的是,我如何从附加的服务器应用程序 sendLine 到所有机器人?每次我创建一个循环来获取 raw_input 时,我都会停止执行。我考虑过针对连接状态函数进行测试,但似乎找不到(如果连接为真,则为 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 发送给所有机器人。

sendLine(raw_input("> "))
4

1 回答 1

2

根本不要使用raw_input。相反,实例化 a stdio.StandardIO,给它的构造函数一个你的LineReceiver子类的实例。lineReceived每当有新行可用时,都会调用您在子类中定义的,然后stdin您可以将其广播给机器人。

Twisted 网站上的这个例子演示了这个想法。

于 2012-10-06T15:58:06.950 回答