Python pysftp模块
SFTP ,简称SSH文件传输协议,也称为安全文件传输协议,它是一种网络协议,允许我们通过任何可靠的数据流访问、传输和管理文件。该程序在一个安全通道上工作,如SSH,服务器已经对客户端进行了身份验证,并且客户端用户的身份对协议是可用的。
使用脚本处理SFTP始终可以得到支持,特别是当我们使用Python这样的编程语言时。Python提供了 pysftp 模块,可以轻松高效地处理这种技术。
在以下教程中,我们将了解Python编程语言中的 pysftp 模块及其使用,并提供一些示例。
那么,让我们开始吧。
理解Python pysftp模块
Python pysftp 模块是一个简单的SFTP接口。该模块提供了高级抽象和基于任务的计划,以处理SFTP需求。SFTP协议不支持安全性和身份验证;它期望基本协议来保护它。SFTP最广泛地被用作SSH协议版本2的子系统实现,由同一工作组设计。
pysftp 模块作为 Paramiko 的包装器,具有更具Python风格的接口。Paramiko库是一个很棒的Python库,被认为是 pysftp 的基础。由 pysftp 创建的方法是抽象的,通过封装与SFTP交互的各种高级功能用例,提高了程序员的生产力。我们无需编写脚本来遍历目录并调用get和put,同时处理不仅是Paramiko,还包括Python的OS和stat模块,并编写测试(互联网上的许多代码片段都是不完整的,不考虑边界情况)。 pysftp 模块提供了一个完整的库来处理这三者,使我们能够专注于其他主要任务。
现在,让我们安装Python的 SFTP 模块或 pysftp。
如何安装pysftp模块
pysftp 接口没有暴露大部分 Paramiko 的功能;然而,它使用单个方法抽象了几乎所有功能。相比之下, pysftp 模块在 Paramiko 之上实现了更高级的功能,尤其是递归文件传输。
我们可以使用pip安装程序来安装 pysftp 模块,命令如下:
语法:
$ pip install pysftp
# or
$ python3 -m pip install pysftp
该模块将作为Python和pip的版本安装在系统中。
验证安装
为了检查模块是否已正确安装在系统中,我们可以尝试导入模块并执行程序。
安装完成后,创建一个新的Python文件并在其中输入以下语法。
示例:
# importing the required module
import pysftp
现在,保存该文件并使用以下命令在命令提示符中运行该文件。
语法:
$ python <file-name>.py
如果程序运行时没有引发任何导入错误,则模块已正确安装。否则,建议重新安装该模块并参考其官方文档。
使用pysftp访问SFTP服务器
我们可以使用Python的pysftp模块列出目录内容。为了实现这个目标,我们需要主机名、用户名和密码。
然后,我们需要使用 chdir 或 cwd 方法按远程目录切换。
让我们以以下示例说明。
示例:
# importing the required module
import pysftp
# defining the host, username, and password
my_Hostname = "welcomeblog.com"
my_Username = "root"
my_Password = "root"
# using the python with statement
with pysftp.Connection(
host = my_Hostname,
username = my_Username,
password = my_Password
) as sftp:
print("Connection succesfully established ... ")
# Switching to a remote directory
sftp.cwd('/var/www/vhosts/')
# Obtaining structure of the remote directory '/var/www/vhosts'
dir_struct = sftp.listdir_attr()
# Printing data
for attr in dir_struct:
print(attr.filename, attr)
# connection closed automatically at the end of the with statement
解释:
上面的代码片段是一个不存在的虚拟服务器。但在现实生活中,我们必须利用环境变量在任何文件中获取原始凭据,以确保安全,并不在单个文件中保存所有凭据。建议将其放在环境变量文件中,例如.env文件。
现在,让我们理解上面的代码。对于任何人来说,上面的代码片段是相同的,因为我们必须提供凭据,程序将开始工作。
首先,我们导入了 pysftp 模块,然后提供了用于存储主机名、用户名和密码的变量。然后,我们使用Python的 with 语句打开与远程服务器的安全连接,提供主机名、用户名和密码。如果成功,我们将切换到远程目录,获取列表并逐个在控制台打印出来。
列表的顺序是任意的,并且不涉及唯一条目“。”和“..”。返回的 SFTPAttributes 对象将有一个附加字段: longname, 它可能由UNIX格式的文件属性的格式化字符串组成。字符串的内容将依赖于SFTP服务器。
使用Python的pysftp上传文件
我们可以使用 pysftp 和SFTP客户端的 sftp.put() 函数通过SFTP在远程服务器上上传文件。 put 方法需要将文件的相对或绝对本地路径作为第一个参数,并将文件应上传到的远程路径作为第二个参数。
让我们考虑以下代码片段以便更好地理解。
示例:
# importing the required module
import pysftp
# defining the host, username, and password
my_Hostname = "welcomeblog.com"
my_Username = "root"
my_Password = "root"
# using the python with statement
with pysftp.Connection(
host = my_Hostname,
username = my_Username,
password = my_Password
) as sftp:
print("Connection succesfully established ... ")
# Defining a file that we want to upload from the local directorty
# or absolute "/Users/krunal/Desktop/code/pyt/app.txt"
local_File_Path = './app.txt'
# Defining the remote path where the file will be uploaded
remote_File_Path = '/var/backups/app.txt'
# Using the put method to upload a file
sftp.put(local_File_Path, remote_File_Path)
# connection closed automatically at the end of the with statement
解释:
在上面的代码片段中,我们建立了一个安全连接,然后定义了两个文件路径- local_File_Path 和 remote_File_Path。
- local_File_Path: 这个文件路径是本地文件的路径。
- remote_File_Path: 这个文件路径是远程文件的路径。
然后,我们使用 sftp.put() 函数将文件上传到服务器。
使用Python中的pysftp下载远程文件
在前面的部分中,我们讨论了使用 pysftp 上传文件的方法。现在我们来了解下载文件的方法。
我们可以通过打开一个连接,从 pysftp 实例中获取 sftp 实例,并使用 get 方法来下载服务器上的文件。第二个参数是我们应该存储文件的本地路径。
让我们来看一个展示相同过程的示例。
示例:
# importing the required module
import pysftp
# defining the host, username, and password
my_Hostname = "welcomeblog.com"
my_Username = "root"
my_Password = "root"
# using the python with statement
with pysftp.Connection(
host = my_Hostname,
username = my_Username,
password = my_Password)
as sftp:
print("Connection succesfully established ... ")
# Defining the remote path file path
remote_File_Path = '/var/backups/app.txt'
# Defining a directory in which we have to save the file.
# or absolute "/Users/krunal/Desktop/code/pyt/app.txt"
local_File_Path = './app.txt'
# Using the get method to download a file
sftp.get(remote_File_Path, local_File_Path)
# connection closed automatically at the end of the with statement
说明:
在上面的代码片段中,我们定义了一个连接,然后定义了两个文件路径 – remote_File_Path 和 local_File_Path
- remote_File_Path: 这个文件路径是文件所在的路径。
- local_File_Path: 这个文件路径是文件将要下载到的路径。
然后,我们使用 sftp.get() 函数来下载文件。
使用Python中的pysftp删除文件
我们可以使用pysftp来删除文件,通过使用 sftp.remove() 函数。这个 remove() 函数的第一个参数期望是远程文件的绝对路径。
让我们来看一个示例来演示相同的操作。
示例:
# importing the required module
import pysftp
# defining the host, username, and password
my_Hostname = "welcomeblog.com"
my_Username = "root"
my_Password = "root"
# using the python with statement
with pysftp.Connection(
host = my_Hostname,
username = my_Username,
password = my_Password)
as sftp:
print("Connection succesfully established ... ")
# Defining the remote path file path
remote_File_Path = '/var/backups/app.txt'
# Using the get method to download a file
sftp.remove(remote_File_Path)
# connection closed automatically at the end of the with statement
解释:
在上面的代码片段中,我们打开了一个连接,然后定义了一个 remove_File_Path 变量,该变量包含需要删除的文件的路径。
然后,我们使用 sftp.remove() 函数来从远程服务器中删除文件。
pysftp 模块有各种功能,我们可以利用这些功能来执行各种操作,例如处理权限等。还可以查看Python pysftp 模块的官方文档。