[Twisted-Python] need help for twisted FTPClient

George Pauly george at ringdevelopment.com
Wed Feb 11 08:54:44 EST 2009


Ioscas,

I don't know much about FTP, but your code doesn't look much like the
example
(http://twistedmatrix.com/projects/core/documentation/examples/) .

This page wasn't hard for me to find.  I used "ftp twisted example" in
search.yahoo.com.

-George



On Wed, 2009-02-11 at 11:43 +0800, 柳锴 wrote:
> hello, everyone:
>  
>     I'm new to twisted and ftp protocol. for some purpose, i need a
> python ftp client to do list, get, put, remove operations upon a FTP
> server which is implemented with twisted. 
>     here is my codes, testing for 'get' passed, but 'put' failed. i
> checked the api of storeFile, abd got these:
>  
> '''
> def storeFile(self, path, offset=0): (source) 
>  
> Store a file at the given path.
> This method issues the 'STOR' FTP command. 
> Returns
> A tuple of two Deferreds: 
>       * Deferred
>         IFinishableConsumer. You
>         must call the finish method
>         on the IFinishableConsumer
>         when the file is completely
>         transferred. 
>       * Deferred list of
>         control-connection
>         responses. 
> '''
>  but i don't know how to handle it, :)
>  sorry for the rubbish codes, but i really need help from you guys,
> it's hard to find some useful info from twisted official doc,
>  Any suggestion on how to write a nice ftp client with twisted is
> welcome. 
>  Thanks in advance. 
>  
> IOSCAS
>  
> ______________________________________________________________________________
>  
> from twisted.protocols.ftp import FTPClient, FTPFileListProtocol
> from twisted.internet.protocol import Protocol, ClientCreator
> from twisted.python import usage
> from twisted.internet import reactor, defer
>  
> class SaveFile(Protocol):
>     '''
>     save the ftp file to local filesystem
>     '''
>     def __init__(self, output):
>         self.fout = open(output, 'w')
>         
>     def dataReceived(self, data):
>         self.fout.write(data)
>         self.fout.close()
>  
> class FTP:
>     '''
>     a simple ftp client
>     '''
>     def __init__(self, host, port):
>         ''' 
>         init 
>         '''
>         self.__host = host
>         self.__port = port
>         self.__username = 'aaa'
>         self.__passwd = 'bbb'
>         self.__passive = 1
>  
>     def __get(self, ftp_client, src, des):
>         '''
>         '''
>         save_file = SaveFile(des)
>         d = ftp_client.retrieveFile(src, save_file)
>         d = ftp_client.quit()
>         d.addCallback(lambda result: reactor.stop())
>         return d
>    
>     def get(self, src, des):
>         '''
>         get src file from ftp server, store it in des
>         '''
>         creator = ClientCreator(reactor, FTPClient, self.__username,
> self.__passwd, self.__passive)
>         defer = creator.connectTCP(self.__host,
> self.__port).addCallback(self.__get, src, des)
>         reactor.run()
>         return defer.result 
>  
>     def __put(self, ftp_client, src, des):
>         '''
>         '''
>         source_file = os.path.basename(src)
>         target_dir = os.path.dirname(des)
>         ftp_client.changeDirectory(target_dir)
>         d = ftp_client.storeFile(src)
>         d = ftp_client.quit()
>         d.addCallback(lambda result: reactor.stop())
>         return d
>    
>    def put(self, src, des):
>         '''
>         put src file to ftp server, store it in des
>         '''
>         creator = ClientCreator(reactor, FTPClient, self.__username,
> self.__passwd, self.__passive)
>         defer = creator.connectTCP(self.__host,
> self.__port).addCallback(self.__put, src, des)
>         reactor.run()
>         return defer.result
>  
>  
>  
> _______________________________________________
> Twisted-Python mailing list
> Twisted-Python at twistedmatrix.com
> http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python
-- 
George Pauly
Ring Development
www.ringdevelopment.com





More information about the Twisted-Python mailing list