2010-08-10 15 views
8

Ich versuche, ftplib zu verwenden, um eine Dateiauflistung zu erhalten und neue Dateien seit meiner letzten Überprüfung herunterzuladen. Der Code Ich versuche, so weit zu laufen ist:Python ftplib Zeitüberschreitung

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

Jedes Mal, wenn ich diese es mal laufen, wenn ich versuche, die Liste abzurufen. Irgendwelche Ideen?

Antwort

9

Höchstwahrscheinlich ein Konflikt zwischen aktivem und passivem Modus. Stellen Sie sicher, dass eine der folgenden Bedingungen erfüllt ist:

  1. Der Server unterstützt PASV-Modus und Ihr Kunde setzt PASV Modus
  2. Wenn der Server nicht im passiven Modus nicht unterstützt, dann Ihre Firewall aktiven Modus FTP-Übertragungen unterstützen.

EDIT: Ich schaute auf die Dokumente, und festgestellt, dass in Python 2.1 und höher der Standard ist passiver Modus. Mit welchem ​​Server sprechen Sie, und wissen Sie, ob es den passiven Modus unterstützt? Im aktiven Modus (Nicht-PASV) sendet der Client einen PORT-Befehl, der dem Server mitteilt, dass die DATA-Verbindung an diesem Port initiiert werden soll. Dazu muss die Firewall den PORT-Befehl kennen, damit die eingehende DATA-Verbindung an Sie weitergeleitet werden kann - Einige Firewalls unterstützen dies. Im passiven Modus öffnet der Client die DATA-Verbindung und der Server verwendet sie (der Server ist beim Öffnen der Datenverbindung "passiv").

Nur für den Fall, dass Sie nicht passiven Modus verwenden, tun Sie eine ftp.set_pasv(True) und sehen, ob das einen Unterschied macht.

+1

Sie haben Recht, es war ein Problem mit dem Modus. Der Server, mit dem ich sprechen wollte, benötigte Active. Danke für die Hilfe! – blcArmadillo

10

Wenn Passiv-Modus aus irgendeinem Grunde Versuch versagt:

ftp.set_pasv(False) 

Active-Modus zu verwenden.

Verwandte Themen