繁体   English   中英

从ftp下载第二个文件失败

[英]Downloading second file from ftp fails

我想在python中从FTP下载多个文件。 当我只下载1个文件时,我的代码有效,但不适用于多个文件!

import urllib
urllib.urlretrieve('ftp://ftp.ncbi.nlm.nih.gov/pub/pmc/oa_package/00/00/PMC1790863.tar.gz', 'file1.tar.gz')
urllib.urlretrieve('ftp://ftp.ncbi.nlm.nih.gov/pub/pmc/oa_package/00/00/PMC2329613.tar.gz', 'file2.tar.gz')

错误说:

Traceback (most recent call last):
  File "/home/ehsan/dev_center/bigADEVS-bknd/daemons/crawler/ftp_oa_crawler.py", line 3, in <module>
    urllib.urlretrieve('ftp://ftp.ncbi.nlm.nih.gov/pub/pmc/oa_package/00/00/PMC2329613.tar.gz', 'file2.tar.gz')
  File "/usr/lib/python2.7/urllib.py", line 98, in urlretrieve
    return opener.retrieve(url, filename, reporthook, data)
  File "/usr/lib/python2.7/urllib.py", line 245, in retrieve
    fp = self.open(url, data)
  File "/usr/lib/python2.7/urllib.py", line 213, in open
    return getattr(self, name)(url)
  File "/usr/lib/python2.7/urllib.py", line 558, in open_ftp
    (fp, retrlen) = self.ftpcache[key].retrfile(file, type)
  File "/usr/lib/python2.7/urllib.py", line 906, in retrfile
    conn, retrlen = self.ftp.ntransfercmd(cmd)
  File "/usr/lib/python2.7/ftplib.py", line 334, in ntransfercmd
    host, port = self.makepasv()
  File "/usr/lib/python2.7/ftplib.py", line 312, in makepasv
    host, port = parse227(self.sendcmd('PASV'))
  File "/usr/lib/python2.7/ftplib.py", line 830, in parse227
    raise error_reply, resp
IOError: [Errno ftp error] 200 Type set to I

我该怎么办?

这是python 2.7中的urllib中的一个错误。 在这里报道。 这里解释背后的原因

现在,当用户尝试从同一目录下载相同的文件或另一个文件时,密钥(主机,端口,dirs)保持不变,因此open_ftp()会跳过ftp初始化。 由于这种跳过,以前的FTP连接被重用,当新命令被发送到服务器时,服务器首先发送先前的ACK。 这会导致多米诺骨牌效应并且每个响应都会延迟一个,我们从parse227()获得异常

一种可能的解决方案是清除可能由先前调用构建的缓存。 您可以使用urllib.urlcleanup()之间的方法调用urlretrieve要求相同,提到这里

希望这可以帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM