之前照网上抄的例子都没有问题,手欠觉着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