Python 中的 SCP

Rana Hasnain Khan 2022年12月26日 2022年5月17日
Python 中的 SCP

我们将介绍 Python 中的 SCP 以及如何在我们的 Python 应用程序中使用 SCP 来发送和接收文件。

在 Python 中使用 Scp.py

随着科技的进步,编程扮演着重要的角色。Python 是一种语言,它已证明其在广泛的领域具有最大的多功能性。

Python 有许多模块可以帮助程序员覆盖许多领域并让 Python 取得成功。scp.py 是一个开源 Python 库,用于使用 paramiko 传输在客户端和服务器之间发送和接收文件。

SCP 提供了使用 SCP1 协议的编程接口。SCP1 协议帮助我们在服务器和客户端之间的单个 TCP 连接上进行多个对话。

SCP 提供了几种方法,这些方法提供了在服务器和客户端之间共享文件资源的不同功能。

现在,让我们使用 CLI 安装 SCP 模块,如下所示。

# python
pip install scp

该命令将安装 SCP 库,现在我们可以在示例中使用它。因此,在我们的示例中,我们将从 paramiko 模块导入 SSHClient 以建立客户端和服务器之间的连接。

我们还将从 SCP 模块导入 SCPClient 来定义文件共享协议。导入后,我们将初始化客户端对象,并通过服务器进行连接。

现在,我们将启动将 SSHClient 传输作为参数的 SCP 客户端对象。

之后,我们将使用 put() 方法发送我们的文件。put() 方法使用文件名作为参数。

我们还可以使用另一种方法 get() 从服务器下载文件。我们将使用它从服务器下载文件,如下所示。

# 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')

现在让我们讨论如果我们必须上传目录而不是文件,我们可以做什么。我们可以使用 put() 方法,如下所示。

# python
scp.put('example', recursive=True, remote_path='/home')

从上面的示例中可以看出,我们将名为 example 的整个目录从本地计算机发送到服务器。我们还可以使用关键字参数名称 remote_path 将路径指定为服务器计算机的参数。

现在让我们通过一个示例来跟踪我们从服务器发送或下载的文件的进度。我们将实现一个进度函数,写入共享文件的进度。

如下所示,我们将使用另一个称为 progress() 的函数。

# 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[0], peername[1], filename, float(filesent)/float(filesize)*100) )
scp = SCPClient(ssh.get_transport(), progress4=progress4)

scp.put('example.txt', '~/example.txt')

scp.close()

因此,通过这种方式,我们可以使用 Python 中的 SCP 库轻松地从服务器发送和下载文件。

Rana Hasnain Khan avatar Rana Hasnain Khan avatar

Rana is a computer science graduate passionate about helping people to build and diagnose scalable web application problems and problems developers face across the full-stack.

LinkedIn