質問
どのように理解しようとしている ftplib
作品。
ファイルをFTPサーバーに保存し、コールバックを実装しようとしています。
ドキュメントには次のようにあります:
FTP.storbinary(command, file[, blocksize, callback, rest])
callback
関数はドキュメントのように定義されています:
コールバック関数は以下のために呼び出されます 受信したデータの各ブロックには、 データを与える単一の文字列引数 ブロック。
このコールバックを実装するにはどうすればよいですか?上のサンプルコールバック retrbinary
(ファイルを読む)は次のようになります:
def handle(block):
f.write(block)
print ".",
ダウンロードされているファイルの進行状況が表示されます, f
ファイルオブジェクトであること。
しかし、私はこれをどのように実装するのか迷っています storbinary
.
これをどのように行うことができるかについての提案はありますか?私は知っている block
パラメータですが、アップロードでどのように調整すればよいですか?
更新:
私はアップロードするためのコールバックを持っています:
def handle(block):
f.read(block)
print ".",
しかし、予想通り、それはエラーを与えます:
an integer is required
パッシング int(block)
また、動作しません。
解決
あなたのコールバックが
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のドキュメントから,
コールバックは、データが送信された後に各データブロックで呼び出されるオプションの単一パラメータ呼び出し可能です。
それは純粋に例えば後処理方法です。転送ステータスを表示すると、データの各ブロックが送信された後に呼び出されます。上記は、1024バイトのデータごとに送信した後に呼び出されます。
転送ステータスを実装するには、次のようにします-
sizeWritten = 0
totalSize = someMethodToGetTotalBytesInFile()
def handle(block):
global sizeWritten
sizeWritten += 1024
percentComplete = sizeWritten / totalSize
print "%s percent complete" %str(sizeWritten / totalSize)
os。パス。getsizeは、ファイルの合計サイズをバイト単位で提供します。