Я создал чат-бота для Twitch IRC, я могу подключаться и создавать команды и т. д. и т. д., однако я не могу использовать прерывание клавиатуры в командной строке. Я подозреваю, что это потому, что он застрял в этом бесконечном цикле, и я не знаю, как это исправить? Я новичок в программировании кстати!
Вот код, который у меня есть в моем 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])
((Редактировать: у меня также есть эта проблема, когда соединение с сервером по какой-то причине истекает. Мне удалось заставить его поддерживать соединение с ping/pong в течение примерно 40-45 минут, но затем оно снова отключилось.
РЕДАКТИРОВАТЬ:
Извините, исходный пост был очень грязным. Я создал этот pastebin с наименьшим количеством кода, который мог бы использовать для воссоздания проблемы. Если чат IRC неактивен, он отключится, и я не могу заставить его отправить 2 пинга подряд без каких-либо сообщений между ними, не уверен, что это из-за того, что он отключается перед 2-м пингом или из-за 2-го пинга.
По крайней мере, один раз он отключился еще до того, как я получил первый пинг с сервера.
Пастебин: pastebin.com/sXUW50sS
joinRoom
? Сигналами можно убить только основной поток. - person MisterMiyagi   schedule 23.09.2016s.recv(1024)
) приведет к блокировке. Это блокирующий системный вызов, который вы не можете прервать изнутри python. Это также объяснило бы ваш тайм-аут. - person MisterMiyagi   schedule 23.09.2016print
до возникновения проблемы? Я действительно ставлю наs.recv
блокировку, потому что данных нет. Если вы хотите покопаться в этом, взгляните на HOWTO сокета Python . В нем есть раздел о том, как длина сообщения может привести к вашей ситуации и как с этим справиться. - person MisterMiyagi   schedule 30.09.2016