paramiko之SFTP文件上传功能

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xiao3404/article/details/86563058

SFTP介绍

SFTP即Secure File Transfer Protocol,在paramiko模块中封装了sftp类,我们可以利用该类完成文件上传、下载、目录创建等多种功能,具体接口可以查看官网 http://docs.paramiko.org/en/2.4/api/sftp.html

创建SFTP会话

我们利用paramiko模块中的SSHClient类创建一个client对象后,我们可以用该client的open_sftp接口创建一个新会话完成文件上传、下载等功能操作,其接口说明如下:

open_sftp( )
Open an SFTP session on the SSH server.

Returns:a new SFTPClient session object

文件上传

在SFTP类API中提供了诸如目录切换chdir、获取工作路径getcwd、目录创建mkdir、文件上传put、文件下载get等常见功能的接口。

举例如下:

    try:
        server_dir = '/root/paramiko/'
        # SSHClient对象
        client = ssh_client(ip, usr, password)
        # 打开SFTP会话
        sftp_client = client.open_sftp()

        # 目录创建,目录存在时需要特殊特例,否则有异常 
        sftp_client.mkdir(server_dir)
        
        #目录切换
        sftp_client.chdir(server_dir)
        
        # 文件上传 参数1 本地文件名称 参数2服务器文件名
        sftp_client.put(__file__, '{}test.py'.format(server_dir))
        
		# 会话关闭
        sftp_client.close()

    except Exception:
        sys.exit(1)

为了在实际工程中便于使用和异常处理,将其封装成类,可以有效的处理异常情况,代码如下:

#! /usr/bin/env python
# *_* coding:utf-8 *_*


class CFileHelper(object):
    """
    文件上下创建帮助类
    """
    def __init__(self, client):
        self.client = client
        # return a new SFTPClient session object
        self.sftp = client.open_sftp()
        print('call init func')

    def __del__(self):
        """
        对象释放时自动关闭
        :return:
        """
        self.sftp.close()
        print('call del func')

    def upload(self, local_file, server_file):
        try:
            self.sftp.put(local_file, server_file)
        except Exception:
            print('upload file error')

    def mkdir(self, server_dir):
        try:
            self.sftp.mkdir(server_dir)
        except Exception :
            # dir already exist
            pass

    def down(self, server_file, local_file):
        try:
            self.sftp.get(server_file, local_file)
        except Exception:
            print('down file error')


if __name__ == "__main__":
    pass

代码使用如下:

    try:
        server_dir = '/root/paramiko/'
        # SSHClient对象
        client = ssh_client(ip, usr, password)

        file_helper = CFileHelper(client)
        file_helper.mkdir(server_dir)
        file_helper.upload(__file__, '{}sftp.py'.format(server_dir))
        file_helper.down('{}sftp.py'.format(server_dir), 'E:\\code\\mygit\python\\sftp.py')
        
    except Exception:
        sys.exit(1)

执行效果如下:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/xiao3404/article/details/86563058