我创建了一个聊天机器人Twitch IRC,我可以连接并创建命令等等,但是我不能在命令提示符下使用键盘中断。我怀疑这是因为它陷入了这个无限循环,我不知道如何解决这个问题?我是新来的编程btw!为机器人结束无限循环
这里是我在我的Run.py
中的代码,openSocket()
是在另一个文件中定义的,基本上连接到服务器。 s = socket.socket.
while循环中的第一部分基本上只是读取服务器消息,我认为这对你们来说是非常简单的!
s = openSocket()
joinRoom(s)
readbuffer = ""
while True:
readbuffer = readbuffer + s.recv(1024).decode("utf-8")
temp = str.split(readbuffer, "\n")
readbuffer = temp.pop()
for line in temp:
if "PING" in line:
s.send("PONG :tmi.twitch.tv\r\n".encode("utf-8"))
print("---SENT PONG---")
printMessage(getUser, getMessage, line)
message = getMessage(line)
for key in commands:
command = key
if command in message:
sendMessage(s, commands[command])
((编辑:哪里的服务器的连接,似乎超时不管什么原因我也有这个问题,我设法得到它跟上主让平/乓约40-45min连接,但随后它。再次断开
编辑:
对不起原来的职位是超级凌乱我创造了这个引擎收录与我可以用它来重现问题 最少的代码量。如果IRC聊天是无效的,将断开连接。 ,我无法让它连续发送2个ping,没有任何消息,不知道是否是因为它在第二次ping之前或第二次ping之前断开连接。
至少有一次,即使在我从服务器获得第一次ping之前,它仍然断开连接。
引擎收录:pastebin.com/sXUW50sS
你是否在'joinRoom'中隐式使用多线程?只有主线程可以被信号杀死。 – MisterMiyagi
http://pastebin.com/b3h2Y9BE在这里你可以看到我用来连接服务器的所有功能! – imroroyo
这不是特别有用。请尝试创建[最小示例](http://stackoverflow.com/help/mcve)。你确定你的循环实际上是前进吗?如果您的套接字没有足够的数据,请求它的固定大小('s.recv(1024)')将* block *。这是一个阻塞的系统调用,你不能*在python中放弃。这也可以解释你的超时时间。 – MisterMiyagi