We will introduce
SCP in Python and how to use
SCP in our Python applications to send and receive files.
Scp.py Library in Python
With the advancement in technology, programming plays an important role. Python is one of the languages that has proved its coverage over a wide variety of domains with utmost versatility.
Python has many modules that help programmers cover many domains and allow Python to succeed. The
scp.py is an open-source Python library used to send and receive files between the client and server using the
SCP provides the programming interface to use the
SCP1 protocol helps us have multiple conversations over a single
TCP connection between the server and a client.
SCP provides several methods that provide different functionality of sharing file resources between servers and clients.
Now, let’s install the SCP module using CLI, as shown below.
# python pip install scp
This command will install the library of
SCP, and now we can use it in our examples. So in our example, we will import
SSHClient from the
paramiko module to establish a connection between the client and the server.
We will also import the
SCPClient from the
SCP module to define file sharing protocols. After importing, we will initiate the client object and connect it through the server.
Now, we will initiate the SCP client object that will take the
SSHClient transport as the argument.
After that, we will send our file using the
put() method. The
put() method uses the file name as the argument.
We can also download the files from the server using another method,
get(). We will use it to download the files from the server, as shown below.
# python from paramiko import SSHClient from scp import SCPClient ssh = SSHClient() ssh.load_system_host_keys() ssh.connect('test.net') scp = SCPClient(ssh.get_transport()) scp.put('example.txt', 'example2.txt') scp.get('example2.txt')
Now let’s discuss what we can do if we have to upload a directory instead of a file. We can use the
put() method as shown below.
# python scp.put('example', recursive=True, remote_path='/home')
As you can see from the above example, we sent the whole directory named
example from our local computer to the server. We can also specify the path as the argument for the server computer using the keyword argument name
Now let’s go through an example in which we will track the progress of the file we are sending or downloading from the server. We will implement a progress function that writes the progress of the shared file.
As shown below, we will use another function known as
# python from paramiko import SSHClient from scp import SCPClient import sys ssh = SSHClient() ssh.load_system_host_keys() ssh.connect('test.com') def progress(filename, filesize, filesent): sys.stdout.write("%s's progress: %.2f%% \r" % (filename, float(filesent)/float(filesize)*100) ) scp = SCPClient(ssh.get_transport(), progress=progress) def progress4(filename, filesize, filesent, peername): sys.stdout.write("(%s:%s) %s's progress: %.2f%% \r" % (peername, peername, filename, float(filesent)/float(filesize)*100) ) scp = SCPClient(ssh.get_transport(), progress4=progress4) scp.put('example.txt', '~/example.txt') scp.close()
So in this way, we can easily send and download files from the server using the
SCP library in Python.