[Twisted-Python] Ftp client

Andrew Bennetts andrew-twisted at puzzling.org
Wed Aug 3 11:21:48 EDT 2005

On Wed, Aug 03, 2005 at 04:53:34PM +0200, Michele Petrazzo wrote:
> Andrew Bennetts wrote:
> >
> >What specific problems are you having with twisted.protocols.ftp.FTPClient?
> >
> I change the ftpclient example with this code:
> def run():
>  # Create the client
>  creator = ClientCreator(reactor, FTPClient, user, passwd, 0)
>  creator.connectTCP('', 4559).addCallback(connectionMade)
>  reactor.run()
> def connectionMade(ftpClient):
>  # Get the current working directory
>  ftpClient.pwd().addCallbacks(success, fail)
> One problem is that if the user has no password, I receive an error [1] 
> (if I try to connect with a simple ftp client, when I connect to the 
> server, if it see that I have no password, it connect me without 
> password request), however if the user _has_ password, the client 
> connect correctly.

Before connecting, can you add:

    FTPClient.debug = True

Then we can see a full transcript of what's going on.

> Second:
> if the user _has_ password, so I can connect, I want to send "LIST 
> status" command, if I use:
> ftpClient.queueStringCommand("LIST").addCallbacks(success, fail)
> I receive [2], and if I use:

Right.  LIST requires a data connection to be established, and directly
issuing a LIST without arranging for a PASV or PORT command and associated
connection will fail.

> fileList = FTPFileListProtocol()
> d = ftpClient.list(' status ', fileList)
> d.addCallbacks(showFiles, fail, callbackArgs=(fileList,))
> I receive [3]

Can you retry this with latest Twisted from SVN?  There's a bug in error
reporting and DeferredLists here that's been fixed in SVN that will make
this much clearer.

I don't understand why you're passing ' status ' instead of just 'status',


More information about the Twisted-Python mailing list