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) *<http://twistedmatrix.com/trac/browser/tags/releases/twisted-8.2.0/twisted/protocols/ftp.py#L2389> ** *Store a file at the given path.* *This method issues the 'STOR' FTP command. * *Returns* *A tuple of two ** Deferred*<http://twistedmatrix.com/documents/current/api/twisted.internet.defer.Deferred.html> *s: * - *Deferred*<http://twistedmatrix.com/documents/current/api/twisted.internet.defer.Deferred.html> * **IFinishableConsumer*<http://twistedmatrix.com/documents/current/api/twisted.internet.interfaces.IFinishableConsumer.html> *. You must call the finish method on the IFinishableConsumer when the file is completely transferred. * - *Deferred*<http://twistedmatrix.com/documents/current/api/twisted.internet.defer.Deferred.html> * 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@twistedmatrix.com http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python