J'ai créé un bot de discussion pour Twitch IRC, je peux me connecter et créer des commandes etc etc, mais je ne peux pas utiliser keyboard-interrupt dans l'invite de commande. Je suppose que c'est parce qu'il est coincé dans cette boucle infinie, et je ne sais pas comment résoudre ce problème? Je suis nouveau à la programmation btw!Terminer boucle infinie pour un bot
Voici le code que j'ai dans mon Run.py
, openSocket()
est défini dans un autre fichier, essentiellement la connexion au serveur. s = socket.socket.
La première partie de la boucle while lit essentiellement les messages du serveur, je pense que c'est assez simple pour vous les gars!
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])
((Edit: J'ai aussi ce problème où la connexion au serveur semble temps pour une raison quelconque, je réussi à obtenir garder la connexion avec ping/pong environ 40-45min, mais il. déconnectée à nouveau
EDIT:.
Désolé le message original était super désordre j'ai créé ce pastebin avec le moins de code que je pourrais utiliser pour recréer le problème Si le chat IRC est inactif, il se déconnecte.. , et je ne peux pas l'obtenir pour envoyer 2 pings d'affilée sans aucun message entre les deux, pas sûr si c'est parce qu'il se déconnecte avant le 2ème ping ou à cause du 2ème ping.
Au moins une fois, il s'est déconnecté avant même d'avoir reçu le premier ping du serveur.
Pastebin: pastebin.com/sXUW50sS
Utilisez-vous le multithreading, peut-être implicitement dans 'joinRoom'? Seul le thread principal peut être tué par des signaux. – MisterMiyagi
http://pastebin.com/b3h2Y9BE Ici vous pouvez voir toutes les fonctions que j'ai utilisées pour me connecter au serveur! – imroroyo
Ce n'est pas particulièrement utile. Essayez de créer un [exemple minimal] (http://stackoverflow.com/help/mcve). Êtes-vous sûr que votre boucle avance réellement? Si votre socket n'a pas assez de données, lui demander une taille fixe ('s.recv (1024)') * bloquera *. C'est un appel système bloquant, que vous * ne pouvez pas * abandonner à l'intérieur de python. Cela expliquerait aussi votre délai d'attente. – MisterMiyagi