3

がどのように機能するかを理解しようとしていftplibます。

ファイルを FTP サーバーに保存し、コールバックを実装しようとしています。

ドキュメントには次のように記載されています。

FTP.storbinary(command, file[, blocksize, callback, rest])

callback関数はドキュメントのように定義されています:

データ ブロックを指定する 1 つの文字列引数を使用して、受信したデータ ブロックごとにコールバック関数が呼び出されます。

このコールバックを実装するにはどうすればよいですか? (ファイルの読み取り) のサンプル コールバックは次のretrbinaryようになります。

def handle(block):
    f.write(block)
    print ".", 

ファイルオブジェクトであるダウンロード中のファイルの進行状況を表示しfます。

しかし、これを で実装する方法に途方に暮れていstorbinaryます。

これを行う方法について何か提案はありますか? パラメータについては知っていblockますが、アップロードでどのように調整すればよいですか?

アップデート:

次のようにアップロードするためのコールバックがあります。

def handle(block):
    f.read(block)
    print ".",

しかし、予想どおり、エラーが発生します。

an integer is required

パスint(block)も機能しません。

4

1 に答える 1

5

あなたのコールバックが

def handle(block):
    f.write(block)
    print ".", 

Pythonには、paramsとして渡すことができるファーストクラスの関数があります-これがコールバックのポイントです-関数をparamとしてstorbinary呼び出しに渡します-

ftp.storbinary(command="stor someFileNameOnServer", file=open("localFile",'rb'), callback=handle,blocksize=1024)

python doc から、

callback は、データの送信後に各データ ブロックで呼び出されるオプションの単一パラメータ callable です。

これは純粋に、たとえば転送ステータスを表示するための後処理メソッドであり、データの各ブロックが送信された後に呼び出されます。上記は、1024 バイトのデータを送信するたびに呼び出されます。

転送ステータスを実装するには、次のようなものです-

sizeWritten = 0
totalSize = someMethodToGetTotalBytesInFile()
def handle(block):
    global sizeWritten
    sizeWritten += 1024
    percentComplete = sizeWritten / totalSize
    print "%s percent complete" %str(sizeWritten / totalSize)

os.path.getsize は、ファイルの合計サイズをバイト単位で示します。

于 2011-02-16T19:45:09.830 に答える