【问题标题】:ftp.retrbinary timing out while downloading from remote server从远程服务器下载时 ftp.retrbinary 超时
【发布时间】:2020-01-25 01:30:01
【问题描述】:

我正在尝试从客户端的 ftp 服务器下载文件。我有获取文件的代码,它在我的笔记本电脑上运行良好。当我从虚拟机内的生产服务器中的控制台运行它时,它不起作用。它也不能在我的台式电脑内的虚拟机上运行。 超时发生在 ftp.retrbinary

代码:

# python > 3.6
from ftplib import FTP

file_csv = 'test.txt'

ftp = FTP(host=hostname, timeout=20)
login = ftp.login(user=user_name, passwd=user_pass)

ftp.set_pasv(False)
ftp.cwd('/csv_files/')

localfile = open(file_csv, 'wb')
ftp.retrbinary('RETR ' + file_csv, localfile.write, 1024)
ftp.quit()

localfile.close()

我已将超时设置为 20,否则代码将永远不会停止,除非我强制执行。超时后我收到的消息是

~/.pyenv/versions/3.6.8/lib/python3.6/socket.py in accept(self)
    203         For IP sockets, the address info is a pair (hostaddr, port).
    204         """
--> 205         fd, addr = self._accept()
    206         # If our type has the SOCK_NONBLOCK flag, we shouldn't pass it onto the
    207         # new socket. We do not currently allow passing SOCK_NONBLOCK to

我无法解决这个问题。请如果有人可以帮助解决这个问题,tahnks。

【问题讨论】:

    标签: python ftp timeout ftplib


    【解决方案1】:

    不要使用 FTP 主动模式,除非您有非常具体的原因。由于无处不在的防火墙和 NAT,主动模式通常不起作用。

    改用被动模式。要使用被动模式,请删除此调用:

    ftp.set_pasv(False)
    

    ftplib 默认为被动模式。

    有关一些背景知识,请参阅我在FTP connection modes 上的文章。

    【讨论】:

      【解决方案2】:

      感谢 Martin 的回答,我需要使用 set_pasv 否则它将不起作用。 我解决了这个问题,我的虚拟机使用的是默认的 NAT 设置。切换到另一个设置后它起作用了。(在 vmware 上“使用桥接网络”)

      【讨论】:

        猜你喜欢
        • 2023-03-24
        • 1970-01-01
        • 2016-05-24
        • 2013-03-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-21
        相关资源
        最近更新 更多