pysftp / paramiko problem
MRAB
python at mrabarnett.plus.com
Thu Jun 13 13:23:52 EDT 2019
On 2019-06-13 14:57, Robin Becker wrote:
> On 13/06/2019 05:56, dieter wrote:
>> Robin Becker <robin at reportlab.com> writes:
>>> On 12/06/2019 05:59, dieter wrote:
>>>> Robin Becker <robin at reportlab.com> writes:
>>>>> I am trying to convert older code that uses ftplib as the endpoint has switched to sftp only.
>>> ...
>>> Well with real sftp I can cd to that path so if it is a symlink it goes somewhere.
>>>
>>> With pysftp I am unable to chdir or cd into it. With a bit of
>>> difficulty I can use subprocess + sshpass + sftp to do the required
>>> transfer.
>>
>> Maybe, the problem is the "u" prefix.
>> Can you try your script with Python 3 or encode the unicode
>> into a native ``str``?
>>
> no same happens in a fresh python 3.6 environment
>
>> $ cat - > tsftp.py
>> def main():
>> import pysftp
>> with pysftp.Connection('ftp.remote.com', username='me', password='ucl20 11') as sftp:
>> print('top level')
>> print(sftp.listdir())
>> print(sftp.normalize('XXXX'))
>>
>> if __name__ == '__main__':
>> main()
>> (tpy3) rptlab at app1:~/tmp/tpy3
>> $ python tsftp.py
>> top level
>> ['XXXX']
>> Traceback (most recent call last):
>> File "tsftp.py", line 9, in <module>
>> main()
>> File "tsftp.py", line 6, in main
>> print(sftp.normalize('XXXX'))
>> File "/home/rptlab/tmp/tpy3/lib/python3.6/site-packages/pysftp/__init__.py", line 640, in normalize
>> return self._sftp.normalize(remotepath)
>> File "/home/rptlab/tmp/tpy3/lib/python3.6/site-packages/paramiko/sftp_client.py", line 632, in normalize
>> t, msg = self._request(CMD_REALPATH, path)
>> File "/home/rptlab/tmp/tpy3/lib/python3.6/site-packages/paramiko/sftp_client.py", line 813, in _request
>> return self._read_response(num)
>> File "/home/rptlab/tmp/tpy3/lib/python3.6/site-packages/paramiko/sftp_client.py", line 865, in _read_response
>> self._convert_status(msg)
>> File "/home/rptlab/tmp/tpy3/lib/python3.6/site-packages/paramiko/sftp_client.py", line 894, in _convert_status
>> raise IOError(errno.ENOENT, text)
>> FileNotFoundError: [Errno 2] No such file.
>
> this is what real sftp does
>
>> (tpy3) rptlab at app1:~/tmp/tpy3
>> $ sshpass -p ucl2011 sftp me at ftp.remote.com
>> Connected to ftp.remote.com.
>> sftp> cd XXXX
>> sftp> pwd
>> Remote working directory: /XXXX
>> sftp> ls
>> OLD GR ........
>> ZZZZZ.pdf
>> sftp> ^D
>> (tpy3) rptlab at app1:~/tmp/tpy3
>
What does:
sftp.normalize('.')
return?
More information about the Python-list
mailing list