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?
Solução
Provavelmente, um conflito entre o modo ativo e passivo. Certifique -se de que um dos seguintes é verdadeiro:
- O servidor suporta o modo PASV e seu cliente está configurando o modo PASV
- 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.