之前照网上抄的例子都没有问题,手欠觉着noop没用,就改了一下把noop删了,结果就卡住了。
#原来的代码片段
logprint('>>>>>>>>>>>>下载文件 %s ... ...' %localfile)
blocksize=1024 * 1024
cmpsize=localfile_size
ftp.voidcmd('TYPE I')
conn = ftp.transfercmd('RETR '+remotefile,localfile_size)
conn.settimeout(60) #返回socket 设置超时时间
lwrite=open(localfile,'ab')
while True:
data=conn.recv(blocksize)
if not data:
break
lwrite.write(data)
cmpsize+=len(data)
lwrite.flush()
# print '\x1b[30D download process:%.2f%%' %(float(cmpsize)/remotefile_size*100),
lwrite.close()
ftp.voidcmd('NOOP')
ftp.voidresp()
conn.close()
参考 https://bugs.python.org/issue25458
说这可能是python 2.7 的一个问题,一定要执行 noop 才能通过 viosresp拿到226 transfer complete传输完成的回应,否则就会卡住。
说在收取数据时,增加noop 也可以避免卡住的问题
总之,照例子抄。。。。不要乱改。。。。。
© 2018, 新之助meow. 原创文章转载请注明: 转载自http://www.xinmeow.com