Pergunta

Estou tentando usar o FTPLIB para obter uma listagem de arquivos e baixar novos arquivos desde minha última verificação. O código que estou tentando correr até agora é:

#!/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() 

Sempre que eu corro isso, ele mesmo quando tento recuperar a listagem. Alguma ideia?

Foi útil?

Solução

Provavelmente, um conflito entre o modo ativo e passivo. Certifique -se de que um dos seguintes é verdadeiro:

  1. O servidor suporta o modo PASV e seu cliente está configurando o modo PASV
  2. Se o servidor não suportar o modo passivo, o firewall deverá oferecer suporte ao modo ativo FTP transferências.

EDIT: Olhei para os documentos e descobri que no Python 2.1 e posteriormente o padrão é o modo passivo. Com qual servidor você está falando e você sabe se ele suporta o modo passivo?

No modo ativo (não-PASV), o cliente envia um comando de porta dizendo ao servidor para iniciar a conexão de dados nessa porta, que exige que seu firewall esteja ciente do comando da porta para que ele possa encaminhar a conexão de dados recebida com você-poucos firewalls Apoie isso. No modo passivo, o cliente abre a conexão de dados e o servidor o usa (o servidor é "passivo" na abertura da conexão de dados).

Apenas caso você não esteja usando o modo passivo, faça um ftp.set_pasv(True) E veja se isso faz a diferença.

Outras dicas

Se o modo passivo estiver falhando por algum motivo, tente:

ftp.set_pasv(False)

para usar o modo ativo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top