ftp.retrbinary тайм-аут при загрузке с удаленного сервера - PullRequest
0 голосов
/ 25 января 2020

Я пытаюсь загрузить файл с ftp-сервера клиента. У меня есть код, который получает файл, и он отлично работает на моем ноутбуке. Когда я запускаю его с консоли на моем производственном сервере, который находится внутри виртуальной машины, он не работает. Он также не работает на виртуальной машине внутри моего рабочего стола p c. Тайм-аут произошел на 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.

Ответы [ 2 ]

0 голосов
/ 28 января 2020

Спасибо за ответ, Мартин, мне нужно использовать set_pasv, иначе он не будет работать. Я решил проблему, моя виртуальная машина использовала настройки NAT по умолчанию. После переключения на другие настройки все заработало («Использовать мостовую сеть» в vmware)

0 голосов
/ 25 января 2020

Не используйте активный режим FTP, если у вас нет очень конкретной причины c. Активный режим обычно не работает из-за вездесущих брандмауэров и NAT.

Вместо этого используйте пассивный режим. Чтобы использовать пассивный режим, удалите этот вызов:

ftp.set_pasv(False)

ftplib по умолчанию установлен в пассивный режим.

Для получения дополнительной информации см. Мою статью о Режимы FTP-соединения .

...