尝试使用简单的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("> "))
答案 0 :(得分:2)
根本不要使用raw_input
。相反,实例化stdio.StandardIO
,为其构造函数提供LineReceiver
子类的实例。只要在lineReceived
上有新行,就会调用您在子类中定义的stdin
,然后您可以将其广播到机器人。