Я пытаюсь использовать ftplib, чтобы получить список файлов и загрузить любые новые файлы начиная с моей последней проверки. Код, который я пытаюсь выполнить до сих пор:
#!/usr/bin/env python
from ftplib import FTP
import sys
host = 'ftp.***.com'
user = '***'
passwd = '***'
try:
ftp = FTP(host)
ftp.login(user, passwd)
except:
print 'Error connecting to FTP server'
sys.exit()
try:
ftp.retrlines('LIST')
except:
print 'Error fetching file listing'
ftp.quit()
sys.exit()
ftp.quit()
Каждый раз, когда я выполняю это, это испытывает таймаут, когда я пытаюсь получить список. Какие-либо идеи?
Скорее всего, конфликт между активным и пассивным режимом. Убедитесь, что верно одно из следующих условий:
EDIT: Я просмотрел документацию и обнаружил, что в Python 2.1 и более поздних версиях по умолчанию используется пассивный режим. С каким сервером вы разговариваете, и знаете ли вы, поддерживает ли он пассивный режим?
В активном режиме (не PASV) клиент посылает команду PORT, указывающую серверу инициировать DATA-соединение на этом порту, что требует, чтобы ваш брандмауэр знал о команде PORT, чтобы он мог перенаправить входящее DATA-соединение к вам - немногие брандмауэры поддерживают это. В пассивном режиме клиент открывает DATA-соединение, а сервер использует его (сервер "пассивен" в открытии data-соединения).
На всякий случай, если вы не используете пассивный режим, сделайте ftp.set_pasv(True)
и посмотрите, есть ли разница.