[email protected] wrote:
Thank you. You are right, retrbinary did not notice I want to abort,
so it won't break the recv loop and close data connection....
def getpart(self, ftp_filename, rest, cnt, out_filename):
self.outf = open(out_filename, 'wb')
self.cnt = cnt
self.handle.voidcmd('TYPE I')
conn = self.handle.transfercmd('RETR ' + ftp_filename, rest)
while 1:
data = conn.recv(8192)
if not data:
break
if self.getpart_callback(data):
try:
self.handle.abort()
break
except:
pass
self.outf.close()
self.handle.voidresp()
conn.close()
How about:
import logging
...
def getpart(self, ftp_filename, rest, cnt, out_filename):
with open(out_filename, 'wb') as outf:
self.outf = outf
self.cnt = cnt
self.handle.voidcmd('TYPE I')
conn = self.handle.transfercmd('RETR ' + ftp_filename,
rest)
data = conn.recv(8192)
while data:
if self.getpart_callback(data):
try:
self.handle.abort()
break
except BaseException, why:
# "except BaseException as why:" if >= Py2.6
logging.error('%s: %s encountered' % (
(why.__class__.__name__, why))
if not isinstance(why, Exception):
raise
data = conn.recv(8192)
self.handle.voidresp()
conn.close()
--Scott David Daniels
[email protected]
--
http://mail.python.org/mailman/listinfo/python-list