Frage

Ich möchte FTPLIB (und möglicherweise möglicherweise verwenden ftputil) für die automatisierte FTP -Dateisynchronisierung. Ich habe im Moment ein paar Server, gegen die ich dies testen kann, aber während ich ein erfolgreiches Gespräch mit beiden Servern habe, bekomme ich mit jeder Fehlerantwort eoFerror-s. Zum Beispiel: Wenn ich versuche, mich mit einem falschen Benutzer/Pass zu melden, bekomme ich die 530 -Antwort mit allem ... aber ich bekomme auch einen eoFerror. Wenn ich mich mit einem korrekten Benutzer/Pass anmelde oder versuche, danach usw. zu usw., bekomme ich kein EoFerror.

Es scheint nur mit Fehlermeldungen zu erscheinen. Ich vermute stark, dass dies eher von den Servern als von Python verursacht werden kann: Ich habe diese Ausgabe an anderer Stelle nicht erwähnt. Ich habe jedoch nur sehr wenig Kontrolle über das Server -Setup.

Ich bitte um Ideen:

  • Wissen Sie, was den Fehler überhaupt verursachen könnte?
  • Wenn es serverseitig ist, könnten Sie genauer sein? Ich werde nicht wissen, ob ich etwas dagegen tun kann, bis ich weiß, was es ist ...
  • Wie denkst du sollte ich damit umgehen? Ich denke, ich könnte eine hinzufügen except EOFError: pass Vor jedem Mal, wenn ich eine Ausnahme mache, aber wenn Sie bessere/ordnere Ideen haben, würde ich sie gerne hören.

Vielen Dank!

War es hilfreich?

Lösung

Die Server senden EOF um Ihnen zu sagen, dass sie die Verbindung beendet haben.

Sie sollten dies nicht anders behandeln als jedes andere Trennungsereignis, außer dass Sie es offensichtlich mit damit umgehen müssen except EOFError.

Siehe die Quelle von, von http://svn.python.org/view/python/trunk/lib/ftplib.py?view=markup

# Internal: return one line from the server, stripping CRLF.
# Raise EOFError if the connection is closed
182     def getline(self):
183         line = self.file.readline()
184         if self.debugging > 1:
185             print '*get*', self.sanitize(line)
186         if not line: raise EOFError
187         if line[-2:] == CRLF: line = line[:-2]
188         elif line[-1:] in CRLF: line = line[:-1]
189         return line

EoFerror wird nur angehoben, wenn readline() Auf der Verbindung gibt eine leere Zeile zurück, die der Kommentar angibt, ein Trennverbot.

Bearbeiten Sie in Ihrem Kommentar:

Der Server sendet keine leere Zeile. readline() Gibt alles bis zum nächsten zurück \n oder \r oder \r\n oder alle Abouve, je nachdem, wie es konfiguriert ist. In diesem Fall, Es gibt nichts zu lesen Weil das Ende der Datei erreicht wurde. Dies bewirkt readline() zu Rückkehr Eine leere Zeile bedeutet nicht, dass eine leere Zeile gelesen wurde. Wenn eine leere Zeile gelesen worden wäre, readline() würde den Charakter zurückgeben, der die Linie beendete (\n oder \r oder \n\r).

Wenn Sie bei Verwendung von FTputil nicht die Ausnahme erhalten, liegt das daran, dass sie intern behandelt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top