Форум сайта python.su
Здравствуйте, пытаюсь написать что-то вроде IRC бота но никак не могу понять как реализовать респонс.Ответ от сервера мне нужен для того чтобы узнать как протекает подключение(удачно или нет,есть конечно try,except но хочется видеть что там творится)
*****************************************************************************************
#!/usr/bin/python
# -*- coding: utf-8 -*-
import socket
CRLF = ‘\r\n’
readbuffer = ‘'
class bot:
def __init__(self, host, port = 6667):
self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
self.sock.connect((host, port))
except:
self.sock.close()
print “Connection error, please try again”
self.file = self.sock.makefile(’rb')
def putcmd(self, cmd):
return self.sock.sendall(“%s%s” % (cmd, CRLF))
def login(self, nickname):
return self.putcmd(“NICK %s” % nickname)
def users(self, username, hostname=“tolmoon”, servername=“tolsun”, realname=“Vova putin”):
return self.putcmd(“USER %s %s %s :%s” % (username, hostname, servername, realname))
def cjoin(self, cname):
return self.putcmd(“JOIN #%s” % cname)
def log(self):
while 1:
readbuffer=self.sock.recv(1024)
temp=readbuffer.split(“\n”)
for line in temp:
if line == “***”:
print line
ircbot = bot('irc.freenode.net')
ircbot.log()
ircbot.login('irbbot1')
ircbot.users('ircbot')
ircbot.cjoin('ubuntu')
*******************************************************************************************************************
То что я пытался сделать вы видите в функции log,правда если я ее включаю то у меня не конектится на канал и нету никакого лога.
Делал без парсинга.Т.е вывод всего ответа у меня питон тупо повисал >_< . Так же пытался сделать через sock.makefile но я так и не понял как он работает,когда писал pop3 модуль ответ отлично приходил,а тут никак.Где можно почитать об socket.makefile побольше? не нашел нормальной информации.
Отредактировано (Ноя. 3, 2008 15:56:21)
Офлайн
Хм, не вижу выхода из цикла “while 1:”, он бесконечен:) sock.makefile - зачем вам объект типа файл? мне кажется он совсем ни к чему… Алгоритм приёма данных нужно немного усложнить (добавить select для проверки наличия данных и аккумулировать куски данных в буфер), или пользоваться готовыми средствами из того же twisted-а…
Офлайн
Проблему решил с помощью slav0nic`а.За что ему спасибо.
Функцию лог надо было вставить просто в конец.
Офлайн