我正在为freenode中的频道制作一个简单的python IRC机器人,只是为了好玩。它可以正常使用以下代码连接到服务器:
irc.connect((server,6667))
irc.send("USER "+botnick+" "+botnick+" "+botnick+" :Howdy mate!\n")
irc.send("NICK "+botnick+"\n")
irc.send("PRIVMSG nickserv :iNOOPE\r\n") #I don't know what this does
irc.send("JOIN "+channel+"\n")
(子问题:第4行做了什么?)
但只有在 irc.recv(2040)返回某些内容时才会触发while循环。所以我按照在线示例添加了
irc.setblocking(False)
后
irc.connect((server,6667))
和
time.sleep(1)
在while循环的开头。
所以现在连接部分看起来像这样:
irc.connect((server,6667))
irc.setblocking(False)
irc.send("USER "+botnick+" "+botnick+" "+botnick+" :Howdy mate!\n")
irc.send("NICK "+botnick+"\n")
irc.send("PRIVMSG nickserv :iNOOPE\r\n")
irc.send("JOIN "+channel+"\n")
但是现在当我尝试运行该程序时,它显示错误:
irc.send("USER "+botnick+" "+botnick+" "+botnick+" :Howdy mate!\n")
TypeError: 'str' does not support the buffer interface
我无法解决此错误,当我删除 irc.setblocking(False)时它会消失。但我真的需要循环来执行,无论 irc.recv(2040)返回一些东西......那么有人能找出错误吗?
编辑:当我在python shell中运行它时,上面的错误显示出来(因为CMD关闭得太快,我无法读取错误)。现在我设法记录并查看CMD中的错误,并说:text=irc.recv(2040)
A non blocking socket operation could not be completed immediatly.
帮助?
答案 0 :(得分:0)
好的,我自己解决了。 text = irc.recv(2040)是个问题。我把它放在 try ... except 块中,它解决了问题。