質問

私はFTPLIBの使用を検討しています(そしておそらく ftputil)自動化されたFTPファイルの同期を実行するため。現時点ではこれをテストするサーバーをいくつか持っていますが、両方のサーバーとの会話を成功させている間、各エラー返信でEoferror-Sを取得します。たとえば、誤ったユーザー/パスでログインしようとすると、すべての530の応答が得られます...しかし、eoferrorも取得します。正しいユーザー/パスでログインするか、そうしてからdir()を試してみてください。

エラーメッセージだけでのみ表示されるようです。これは、Pythonではなくサーバーによって引き起こされる可能性があると強く疑います。他の場所でこの問題について言及していません。ただし、サーバーのセットアップをほとんど制御できません。

私はアイデアを求めています:

  • そもそも何がエラーを引き起こしているのか知っていますか?
  • サーバー側の場合、もっと具体的になることができますか?それが何であるかを知るまで、私はそれについて何かできるかどうかはわかりません...
  • 私はこれをどのように処理するべきだと思いますか?追加できると思います except EOFError: pass 毎回私が例外を処理する前に、しかし、あなたがより良い/耳障りなアイデアを持っているなら、私はそれらを聞きたいと思っています。

ありがとう!

役に立ちましたか?

解決

サーバーが送信しています EOF 彼らが接続を終了したことをあなたに伝えるために。

明らかにそれを処理する必要があることを除いて、他の切断イベントとは違った方法でこれを扱う必要があります except EOFError.

からソースを参照してください 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は、時だけ育てられます readline() 接続では、空白行が返されますが、コメントは切断イベントであることが示されています。

コメントで編集します:

サーバーは空の行を送信しません。 readline() すべてを次のものに戻します \n また \r また \r\n または、構成方法に応じてすべてのアボーブ。この場合、 読むことは何もありません ファイルの終わりに到達したためです。これは〜をひき起こす readline()戻る 空白の行、それは空白の行が読まれたという意味ではありません。空白の行が読まれていた場合、 readline() ラインを終了したキャラクターを返します(\n また \r また \n\r).

Ftputilを使用しているときに例外を取得しない場合、それは内部で処理するためです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top