python 使用ftp transfercmd 传输大文件,在执行voidresp时卡住的问题

之前照网上抄的例子都没有问题,手欠觉着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传输完成的回应,否则就会卡住。

另外参考 https://yauhsien.wordpress.com/2016/07/26/python-ftplib-%E4%B8%8B%E8%BC%89%E5%A4%A7%E6%AA%94%E6%A1%88%E6%9C%83%E5%8D%A1%E4%BD%8F/

说在收取数据时,增加noop 也可以避免卡住的问题

总之,照例子抄。。。。不要乱改。。。。。

© 2018, 新之助meow. 原创文章转载请注明: 转载自http://www.xinmeow.com

0.00 avg. rating (0% score) - 0 votes
点赞