1

少しカスタマイズされたftpサーバーを作成し、コンソールへの印刷例外(特定のタイプの例外)を抑制する必要がありますが、サーバーに「550要求されたアクションが実行されませんでした:内部サーバーエラー」またはそのようなものをクライアントに送信させたいです。

ただし、addErrback() を使用して例外をキャッチすると、コンソールに例外は表示されませんが、クライアントは OK ステータスになります。

どうすればよいですか?

4

1 に答える 1

0

errbackハンドラーでエラーをキャッチしたら、失敗のタイプを検査し、アプリケーションの内部ロジックに基づいて、FTPエラーメッセージとしてエラーをクライアントに送信する必要があります。twisted.protocol.ftp.FTPはself.replyでこれを処理します(ERROR_CODE、 "説明")

したがって、コードは次のようになります。

from twisted.internet import ftp

MY_ERROR = ftp.REQ_ACTN_NOT_TAKEN

def failureCheck(failureInstance):
    #do some magic to establish if we should reply an Error to this failure
    return True

class myFTP(ftp.FTP):
    def myActionX(self):
        magicResult = self.doDeferredMagic()
        magicResult.addCallback(self.onMagicSuccess)
        magicResult.addErrback(self.onFailedMagic)
    def onFailedMagic(self,failureInstance):
        if failureCheck(failureInstance):
            self.reply(MY_ERROR,'Add relevant failure information here')
        else:
            #do whatever other logic here
            pass
于 2012-12-17T10:56:27.943 に答える