Вопрос

Я пытаюсь использовать 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() 

Всякий раз, когда я бегу этим, когда я стараюсь получить список. Любые идеи?

Это было полезно?

Решение

Скорее всего, конфликт между активным и пассивным режимом. Убедитесь, что одно из следующих действий верно:

  1. Сервер поддерживает режим PASV, и ваш клиент устанавливает режим PASV
  2. Если сервер не поддерживает пассивный режим, то ваш брандмауэр должен поддерживать активный режим FTP-передач.

Редактировать: Я посмотрел на документы и обнаружил, что в Python 2.1, а затем по умолчанию является пассивный режим. На каком сервере вы говорите, и DI знаете, поддерживает ли он пассивный режим?

В активном режиме (не PASV) клиент отправляет команду порта, сообщив серверу, инициируйте подключение к данным на этом порту, что требует, чтобы ваш брандмауэр осознавать команду порта, поэтому она может пересылать подключение к входящему входящие данные - несколько брандмауэров Поддержите это. В пассивном режиме клиент открывает соединение данных, и сервер использует его (сервер «пассивный» в открытии подключения к данным).

На всякий случай, если вы не используете пассивный режим, сделайте ftp.set_pasv(True) и посмотреть, имеет ли это значение.

Другие советы

Если Passive Mode не удается по какой-то причине:

ftp.set_pasv(False)

использовать активный режим.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top