Hi, I write the following script to retrieve a part of a large file from a FTP site:
import ftplib class ftp_getter(object): def __init__(self): self.handle = ftplib.FTP('ftp_server_address') self.handle.set_debuglevel(2) self.login() def login(self): self.handle.login('user', 'pass') self.handle.cwd('/temp1/') def quit(self, is_close = False): self.handle.quit() if is_close: self.handle.close() print 'ftp handle closed' def getpart_callback(self, received): print "received a packet" if self.cnt <= 0: if not self.outf.closed: self.outf.close() if not self.aborted: try: self.handle.abort() self.aborted = True except Exception,ex: pass else: print 'received packet, [0] = %x' % ord(received[0]) self.outf.write(received) self.cnt -= len(received) def getpart(self, ftp_filename, rest, cnt, out_filename): self.outf = open(out_filename, 'wb') self.cnt = cnt self.aborted = False self.handle.retrbinary('RETR ' + ftp_filename, self.getpart_callback, 8192, rest) if not self.outf.closed: self.outf.close() if __name__ == '__main__': g = ftp_getter() g.getpart('FILE_TO_RETRIEVE.DAT', 50000, 20, 'out.dat') g.quit(True) print "all done." As the last four lines shown, I want to connect to my FTP server, retrieve 20 bytes starting at offset 50000 from FILE_TO_RETRIEVE.DAT, and stop retrieving after more than 20 bytes have been received. It's quite simple, but to my suprise, this code does not work. "self.handle.abort()" have been executed and I got the expected response from server(426), but the RETR command does not seem to stop at all. More and more data are received and getpart_callback method is called again and again. Why the RETR command is not actually aborted? Can anyone help me? Thanks Xu Wang -- http://mail.python.org/mailman/listinfo/python-list