twisted: problem with sftp-client
Jean-Paul Calderone
exarkun at divmod.com
Wed Jan 23 10:31:27 EST 2008
On Wed, 23 Jan 2008 15:43:47 +0100, Kristian Domke <news at neither-nor.net> wrote:
>Hello Folks,
>
>I don't know, if it is ok to post large portions of code, but I have
>really no idea where the problem lies, so I don't have much of a choice.
>
>I am programming a tool, which in the end shall connect to an
>sftp-server, take the list of files in a specified directory, searches
>for some special names and mailes them to different persons.
>
>I am only at the start at the moment. As orientation I use the cftp.py
>programm from twisted.conch with some alterations because of not having
>userinteraction.
>
>At its current state the programm should do nothing but getting the
>listing of files from a server. It works fine with the cfto.py, so the
>server is ok.
>
>But while the cftp.py script gets 'files' as an exceptions.EOFError
>exeption in the StdioClient._cbReadFile at the end of the listing, I
>just get another list and run into wall (aka Traceback):
>
>> 2008/01/23 16:14 +0200 [SSHChannel session (0) on SSHService
>> ssh-connection on SimpleTransport,client] Unhandled Error
>> Traceback (most recent call last):
>> File "/usr/lib/python2.5/site-packages/twisted/python/log.py", >
>line 48, in callWithLogger
>> return callWithContext({"system": lp}, func, *args, **kw)
>> File "/usr/lib/python2.5/site-packages/twisted/python/log.py", >
>line 33, in callWithContext
>> return context.call({ILogContext: newCtx}, func, *args,
>> **kw)
>> File
>> "/usr/lib/python2.5/site-packages/twisted/python/context.py", line 59,
>> in callWithContext
>> return self.currentContext().callWithContext(ctx, func,
>> *args, **kw)
>> File
>> "/usr/lib/python2.5/site-packages/twisted/python/context.py", line 37,
>> in callWithContext
>> return func(*args,**kw)
>> --- <exception caught here> ---
>> File
>> "/usr/lib/python2.5/site-packages/twisted/conch/ssh/filetransfer.py",
>> line 52, in dataReceived
>> f(data)
>> File
>> "/usr/lib/python2.5/site-packages/twisted/conch/ssh/filetransfer.py",
>> line 694, in packet_STATUS
>> msg, data = getNS(data)
>> File
>> "/usr/lib/python2.5/site-packages/twisted/conch/ssh/common.py", line
>> 39, in getNS
>> l, = struct.unpack('!L',s[c:c+4])
>> File "struct.py", line 87, in unpack
>> return o.unpack(s)
>> struct.error: unpack requires a string argument of length 4
>
>
>I have no Idea, and hope here is someone who can help me.
>
>Kristian
>
> [snip]
>
> def _cbOpenList(self, directory):
> files = []
> log.msg('direc.:%s' % str(directory))
> log.msg('direc.:%s' % type(directory))
> log.msg('direc.:%s' % str(directory.parent))
> log.msg('direc.:%s' % type(directory.parent))
> d = directory.read()
> d.addCallback(self._cbReadFile, files, directory)
> d.addErrback(self._ebRaeadFile, files, directory)
You typo'd the errback method name above. This doesn't cause the problem
you're having, though.
There appears to be a bug in FX_EOF handling in filetransfer.py which
results in the problem you see. It's not completely clear to me why
cftp.py doesn't encounter the same issue. I filed #3009 in the Twisted
issue tracker for this problem. I twiddled the source a bit and seem to
have fixed it, so I think the issue should be easily resolvable. If you
want, you can help out with this by writing unit tests for the issue and
submitting a patch.
Contributing to Twisted is described on this page:
http://twistedmatrix.com/trac/wiki/TwistedDevelopment
Jean-Paul
More information about the Python-list
mailing list