How can I use sftp and mput with Python?
Question:
I’m trying to send over multiple files from one server to another using Python. I’ve found a few ssh2 libraries, but either I can’t find documentation on them (e.g. ssh), or they don’t seem to support mput.
Anyone know of any sftp libraries which support mput?
Answers:
Paramiko is a library that handles SSH and related things, such as SFTP, but it only supports a regular put
, no mput
that I can see.
What exactly does mput
do? My sftp client doesn’t have that command…
Guessing from the name, I’m thinking “multiple puts” or something like that, to send multiple files in one go? If that is the case, I suggest just looping over your list of files and using put
.
I was faced with a similar problem a long time ago and could not get a satisfactory mput
-method to run in Python. So the paramiko library seemed to make the most sense to me.
To enable progress output or other actions in your Python application, it is advantageous to send the files individually in a for-loop. However, the overhead increases minimally with this variant.
A small Paramiko-example code :
import pysftp
import os
list_files_to_transfer = []
# Check if List is empty
if list_files_to_transfer:
# Advanced connection options beyond authentication
cnopts = pysftp.CnOpts()
# Compression for lower Transfer-Load
cnopts.compression = True
cnopts.hostkeys = None
# Establish a connection with the SFTP server
with pysftp.Connection(host=host, username=username, port=port,
private_key=os.path.abspath(path_private_key),
cnopts=cnopts) as sftp:
# Change to the specified remote directory
with sftp.cd(self.path_remote_sink_folder):
# browse the list of files
for file in list_files_to_transfer:
# Upload the file to the server
sftp.put(file)
I’m trying to send over multiple files from one server to another using Python. I’ve found a few ssh2 libraries, but either I can’t find documentation on them (e.g. ssh), or they don’t seem to support mput.
Anyone know of any sftp libraries which support mput?
Paramiko is a library that handles SSH and related things, such as SFTP, but it only supports a regular put
, no mput
that I can see.
What exactly does mput
do? My sftp client doesn’t have that command…
Guessing from the name, I’m thinking “multiple puts” or something like that, to send multiple files in one go? If that is the case, I suggest just looping over your list of files and using put
.
I was faced with a similar problem a long time ago and could not get a satisfactory mput
-method to run in Python. So the paramiko library seemed to make the most sense to me.
To enable progress output or other actions in your Python application, it is advantageous to send the files individually in a for-loop. However, the overhead increases minimally with this variant.
A small Paramiko-example code :
import pysftp
import os
list_files_to_transfer = []
# Check if List is empty
if list_files_to_transfer:
# Advanced connection options beyond authentication
cnopts = pysftp.CnOpts()
# Compression for lower Transfer-Load
cnopts.compression = True
cnopts.hostkeys = None
# Establish a connection with the SFTP server
with pysftp.Connection(host=host, username=username, port=port,
private_key=os.path.abspath(path_private_key),
cnopts=cnopts) as sftp:
# Change to the specified remote directory
with sftp.cd(self.path_remote_sink_folder):
# browse the list of files
for file in list_files_to_transfer:
# Upload the file to the server
sftp.put(file)