Вопрос
Я пытаюсь использовать 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()
Всякий раз, когда я бегу этим, когда я стараюсь получить список. Любые идеи?
Решение
Скорее всего, конфликт между активным и пассивным режимом. Убедитесь, что одно из следующих действий верно:
- Сервер поддерживает режим PASV, и ваш клиент устанавливает режим PASV
- Если сервер не поддерживает пассивный режим, то ваш брандмауэр должен поддерживать активный режим FTP-передач.
Редактировать: Я посмотрел на документы и обнаружил, что в Python 2.1, а затем по умолчанию является пассивный режим. На каком сервере вы говорите, и DI знаете, поддерживает ли он пассивный режим?
В активном режиме (не PASV) клиент отправляет команду порта, сообщив серверу, инициируйте подключение к данным на этом порту, что требует, чтобы ваш брандмауэр осознавать команду порта, поэтому она может пересылать подключение к входящему входящие данные - несколько брандмауэров Поддержите это. В пассивном режиме клиент открывает соединение данных, и сервер использует его (сервер «пассивный» в открытии подключения к данным).
На всякий случай, если вы не используете пассивный режим, сделайте ftp.set_pasv(True)
и посмотреть, имеет ли это значение.
Другие советы
Если Passive Mode не удается по какой-то причине:
ftp.set_pasv(False)
использовать активный режим.