Pergunta

Tentar entender como a ftplib de obras.

Eu estou a tentar guardar um ficheiro para um servidor de FTP e implementar um retorno de chamada.

A documentação diz:

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

callback a função é definida como a documentação:

A função de retorno de chamada é chamada para cada bloco de dados recebido, com um único argumento string fornecendo dados bloco.

Como faço para implementar esse retorno de chamada?Um exemplo de chamada de retorno no retrbinary (a leitura de um arquivo) poderá ter esta aparência:

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

Que irá mostrar o progresso do arquivo que está sendo baixado, f sendo o objeto de arquivo.

Mas eu estou em uma perda sobre como implementar esta com storbinary.

Todas as sugestões sobre como isso pode ser feito?O que eu sei sobre o block parâmetro, mas como faço para ajustá-la com o upload?

ATUALIZAÇÃO:

Eu tenho um retorno de chamada para o upload como:

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

Mas, como esperado, ele dá o erro:

an integer is required

Passando int(block) também não funciona.

Foi útil?

Solução

Se a chamada de retorno é

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

Python tem primeira classe de funções que podem ser passados como parâmetros - este é o ponto de retorno de chamada - você passar a funcionar como parâmetro para o storbinary chamada-

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

A partir do python doc,

de retorno de chamada é um opcional único parâmetro exigível que é chamado em cada bloco de dados depois que ele for enviado.

É puramente uma pós-método de processamento por exemplo:mostrando o status de transferência, que é chamado depois de cada bloco de dados é enviado.Acima do que seria chamado depois de enviar a cada 1024 bytes de dados.

Para implementar status da transferência, algo assim-

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

os.caminho.getsize lhe dará o tamanho total em bytes do arquivo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top