Prev: MySQLdb problems with named pipe connection on Windows 7?
Next: How do subprocess.Popen("ls | grep foo",shell=True) with shell=False?
From: Burakk on 10 Jun 2010 18:26 Hi, I am using ubuntu lucid and i have started to learn python(vrs 3.1). I am trying to make a tutorial code(see below) work but when i run the code, open a terminal window and connect as client with telnet and type somethings and hit enter, give me error below...(the terminal says connection closed by foreign host) if someone can help i will be glad... thanx -- error: uncaptured python exception, closing channel <__main__.ChatSession connected 127.0.0.1:46654 at 0xb71cce8c> (<class 'TypeError'>:expected an object with the buffer interface [/usr/lib/ python3.1/asyncore.py|read|75] [/usr/lib/python3.1/asyncore.py| handle_read_event|420] [/usr/lib/python3.1/asynchat.py|handle_read| 170]) -- code from asyncore import dispatcher from asynchat import async_chat import asyncore import socket PORT = 5005 NAME = 'TestChat' class ChatSession(async_chat): def __init__(self, sock): async_chat.__init__(self, sock) self.set_terminator("xx") self.data = [] def collect_incoming_data(self, data): self.data.append(data) def found_terminator(self): line = ''.join(self.data) self.data = [] self.push(line) class ChatServer(dispatcher): def __init__(self, port): dispatcher.__init__(self) self.create_socket(socket.AF_INET, socket.SOCK_STREAM) self.set_reuse_addr() self.bind(('', PORT)) self.listen(5) self.sessions = [] def handle_accept(self): conn, addr = self.accept() self.sessions.append(ChatSession(conn)) if __name__== '__main__': s = ChatServer(PORT) try: asyncore.loop() except KeyboardInterrupt : print
From: Peter Pearson on 11 Jun 2010 12:12 On Thu, 10 Jun 2010 15:26:28 -0700 (PDT), Burakk wrote: > Hi, > > I am using ubuntu lucid and i have started to learn python(vrs 3.1). I > am trying to make a tutorial code(see below) work but when i run the > code, open a terminal window and connect as client with telnet and > type somethings and hit enter, give me error below...(the terminal > says connection closed by foreign host) > > if someone can help i will be glad... I know this is very little help, but your code appears to work fine under Python 2.5.2. -- To email me, substitute nowhere->spamcop, invalid->net.
From: Giampaolo Rodolà on 11 Jun 2010 12:35 In every dispatcher instance of your application I recommend to override handle_error as follows: class A(asyncore.dispatcher) def handle_error(self): raise This will print a common traceback message instead of the compact one provided by asyncore which provides a lot less information. --- Giampaolo http://code.google.com/p/pyftpdlib http://code.google.com/p/psutil 2010/6/11 Burakk <burak.kuyucakli(a)gmail.com>: > Hi, > > I am using ubuntu lucid and i have started to learn python(vrs 3.1). I > am trying to make a tutorial code(see below) work but when i run the > code, open a terminal window and connect as client with telnet and > type somethings and hit enter, give me error below...(the terminal > says connection closed by foreign host) > > if someone can help i will be glad... > > thanx > > -- error: uncaptured python exception, closing channel > <__main__.ChatSession connected 127.0.0.1:46654 at 0xb71cce8c> (<class > 'TypeError'>:expected an object with the buffer interface [/usr/lib/ > python3.1/asyncore.py|read|75] [/usr/lib/python3.1/asyncore.py| > handle_read_event|420] [/usr/lib/python3.1/asynchat.py|handle_read| > 170]) -- > > code > > from asyncore import dispatcher > from asynchat import async_chat > import asyncore > import socket > > PORT = 5005 > NAME = 'TestChat' > > class ChatSession(async_chat): > > def __init__(self, sock): > async_chat.__init__(self, sock) > self.set_terminator("xx") > self.data = [] > > > def collect_incoming_data(self, data): > self.data.append(data) > > > def found_terminator(self): > line = ''.join(self.data) > self.data = [] > self.push(line) > > class ChatServer(dispatcher): > def __init__(self, port): > dispatcher.__init__(self) > self.create_socket(socket.AF_INET, socket.SOCK_STREAM) > self.set_reuse_addr() > self.bind(('', PORT)) > self.listen(5) > self.sessions = [] > > > def handle_accept(self): > conn, addr = self.accept() > self.sessions.append(ChatSession(conn)) > > if __name__== '__main__': > s = ChatServer(PORT) > try: asyncore.loop() > except KeyboardInterrupt : print > > -- > http://mail.python.org/mailman/listinfo/python-list >
From: Burakk on 11 Jun 2010 15:03 Thank you for your replies... I have overriden the error handlers and the results: Traceback (most recent call last): File "/home/burak/NetBeansProjects/intantMarkup/src/ 02basicServer.py", line 65, in <module> try: asyncore.loop() File "/usr/lib/python3.1/asyncore.py", line 206, in loop poll_fun(timeout, map) File "/usr/lib/python3.1/asyncore.py", line 147, in poll read(obj) File "/usr/lib/python3.1/asyncore.py", line 79, in read obj.handle_error() File "/usr/lib/python3.1/asyncore.py", line 75, in read obj.handle_read_event() File "/usr/lib/python3.1/asyncore.py", line 420, in handle_read_event self.handle_read() File "/usr/lib/python3.1/asynchat.py", line 170, in handle_read index = self.ac_in_buffer.find(terminator) TypeError: expected an object with the buffer interface But i want to add that i am writing the code in netbeans with python 3.1 and running the code from the programme.. Ubuntu deafult python is 2.6.5. Is this a problem. And i also want to add that i made the .py executable and run that from terminal too with the same results...
From: Thomas Jollans on 12 Jun 2010 17:10
On 06/11/2010 12:26 AM, Burakk wrote: > Hi, > > I am using ubuntu lucid and i have started to learn python(vrs 3.1). I > am trying to make a tutorial code(see below) work but when i run the > code, open a terminal window and connect as client with telnet and > type somethings and hit enter, give me error below...(the terminal > says connection closed by foreign host) > > if someone can help i will be glad... > > thanx > > -- error: uncaptured python exception, closing channel > <__main__.ChatSession connected 127.0.0.1:46654 at 0xb71cce8c> (<class > 'TypeError'>:expected an object with the buffer interface [/usr/lib/ > python3.1/asyncore.py|read|75] [/usr/lib/python3.1/asyncore.py| > handle_read_event|420] [/usr/lib/python3.1/asynchat.py|handle_read| > 170]) -- > my guess is that you can't use (unicode) strings as network data. You'd have to use byte strings most of the time. (only a guess) This code was probably written with Python 2 in mind. See below > code > > from asyncore import dispatcher > from asynchat import async_chat > import asyncore > import socket > > PORT = 5005 > NAME = 'TestChat' > > class ChatSession(async_chat): > > def __init__(self, sock): > async_chat.__init__(self, sock) > self.set_terminator("xx") replace that with b"xx" > self.data = [] > > > def collect_incoming_data(self, data): > self.data.append(data) > > > def found_terminator(self): > line = ''.join(self.data) use b''.join(self.data) > self.data = [] > self.push(line) > > class ChatServer(dispatcher): > def __init__(self, port): > dispatcher.__init__(self) > self.create_socket(socket.AF_INET, socket.SOCK_STREAM) > self.set_reuse_addr() > self.bind(('', PORT)) > self.listen(5) > self.sessions = [] > > > def handle_accept(self): > conn, addr = self.accept() > self.sessions.append(ChatSession(conn)) > > if __name__== '__main__': > s = ChatServer(PORT) > try: asyncore.loop() > except KeyboardInterrupt : print This won't do anything: print is now a function, not a statement. Use print() instead. Also, that's silly. If you want to ignore keyboard interrupts (I don't think that's a good idea), use "pass" instead of "print()". > |