I'm trying to use paramiko to get a file via SFTP. It connects, I can list directories and it even downloads the first megabyte or so of the file but then it just hangs. No exception, no error, nothing. It just hangs there indefinitely.
Here's the code I'm working with:
import paramiko
t = paramiko.Transport( host )
t.connect( username=uname, password=passwd )
f = paramiko.SFTPClient.from_transport( t )
print f.listdir()
f.get( fname, fname ) #it hangs on this line :\
I have sftp access to the host in question but no shell access. The host contains a single file that I need to fetch regularly and process in a python script.
Any help with this problem or alternate solutions to doing SFTP in Python are greatly appreciated :)
I was experiencing the same problem as Ulfur. He posted his own fix/workaround as a comment to another answer, so I decided to add it as a proper answer to make it more visible.
The basic idea is to not use the .get() method, but to loop over the lines. The following is a Python 3 implementation.
transport = None
sftp = None
sftp_path = 'some/sftp/path'
dst_path = '/some/local/path'
try:
transport = paramiko.Transport((SFTP_HOST, SFTP_PORT))
transport.set_log_channel('delapi')
transport.connect(username=SFTP_USER, password=SFTP_PASS)
sftp = paramiko.SFTPClient.from_transport(transport)
with sftp.open(sftp_path, 'r') as remote:
with open(dst_path, 'w') as local:
for line in remote:
local.write(line)
except SSHException:
print("SSH error")
finally:
if sftp:
sftp.close()
if transport:
transport.close()
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With