The Python Oracle

Downloading file with pysftp

--------------------------------------------------
Hire the world's top talent on demand or became one of them at Toptal: https://topt.al/25cXVn
and get $2,000 discount on your first invoice
--------------------------------------------------

Music by Eric Matyas
https://www.soundimage.org
Track title: Techno Intrigue Looping

--

Chapters
00:00 Downloading File With Pysftp
00:42 Accepted Answer Score 39
01:38 Thank you

--

Full question
https://stackoverflow.com/questions/4463...

--

Content licensed under CC BY-SA
https://meta.stackexchange.com/help/lice...

--

Tags
#python #sftp #pysftp

#avk47



ACCEPTED ANSWER

Score 39


Connection.get does not return anything. It downloads the remote file to a local path specified by the localpath argument. If you do not specify the argument, it downloads the file to the current working directory.

So if you want to download to a specific local directory instead, you want this:

sftp.get('directory/file.csv', '/local/path/file.csv')

If you really want to read the file to a variable (what I understand that you actually do not want), you need to use Connection.getfo, like:

flo = BytesIO()
sftp.getfo(remotepath, flo)
flo.seek(0)

Alternatively, use Paramiko library directly (without the pysftp wrapper).
See Read a file from server with SSH using Python.


Obligatory warning: Do not set cnopts.hostkeys = None, unless you do not care about security. For the correct solution see Verify host key with pysftp.