博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python paramiko 远程下载
阅读量:5354 次
发布时间:2019-06-15

本文共 3561 字,大约阅读时间需要 11 分钟。

实现功能:

利用 paramiko 模块实现

1.远程目录检索

2.远程文件下载

3.远程目录下载(带目录结构)

class SFTPConnection(object):    def __init__(self, host, username, password, port=22):        try:            self.transport = paramiko.Transport(sock=(host, port))            self.transport.connect(username=username, password=password)            self.sftp = paramiko.SFTPClient.from_transport(self.transport)        except Exception, e:            traceback.print_exc()            sys.stderr.write("%s\n" % e)            sys.exit(-1)    def __del__(self):        if self.transport:            self.transport.close()    def traverse_directory(self, base_dir, deep=1):        """Traverse directory"""        dir_stru = {}        base_dir_name = os.path.basename(base_dir)        dir_list = self.sftp.listdir(base_dir)        for dir_name in dir_list:            dir_path = os.path.join(base_dir, dir_name)            if not self._is_file(dir_path):                if deep > 1:                    dir_stru.setdefault(base_dir_name, []).append(self.traverse_directory(base_dir=dir_path,                                                                                          deep=deep - 1))                else:                    dir_stru.setdefault(base_dir_name, []).append(dir_name)            else:                dir_stru.setdefault(base_dir_name, []).append(dir_name)        if not dir_list:            dir_stru.setdefault(base_dir_name, []).append("")        return dir_stru    def _is_file(self, file_path):        if not self._exist_path(file_path):            sys.stderr.write("File path is not exist.[%s]\n" % file_path)            return None        return not stat.S_ISDIR(self.sftp.stat(file_path).st_mode)    def _exist_path(self, file_path):        try:            file_stat = self.sftp.stat(file_path)            return True        except IOError, e:            traceback.print_exc()            sys.stderr.write("%s\n" % e)            return False    def file_downloader(self, file_path_src, file_dir_des):        file_path_des = os.path.join(file_dir_des, os.path.basename(file_path_src))        if os.path.exists(file_path_des):            sys.stderr.write("Download File[%s] have exist. Pass it.\n" % file_path_des)            return        if not self._exist_path(file_path_src) or not self._is_file(file_path_src):            sys.stderr.write("File[%s] is not exist or is not a file.\n" % file_path_src)            sys.exit(-1)        if not os.path.exists(file_dir_des):            os.mkdir(file_dir_des)        sys.stdout.write("File[%s] size is %s \n" % (file_path_src, pretty_size(self.sftp.stat(file_path_src).st_size)))        self.sftp.get(file_path_src, file_path_des)        sys.stdout.write("Download file[%s] to [%s] done.\n" % (file_path_src, file_path_des))    def directory_download(self, dir_path_src, dir_path_des):        if not self._exist_path(dir_path_src):            sys.stderr.write("path[%s] is not exist in remote machine.\n" % dir_path_src)            sys.exit(-1)        if not os.path.exists(dir_path_des):            os.mkdir(dir_path_des)        for sub_dir_name in self.sftp.listdir(dir_path_src):            sub_dir_path = os.path.join(dir_path_src, sub_dir_name)            if self._is_file(sub_dir_path):                self.file_downloader(sub_dir_path, dir_path_des)            else:                self.directory_download(sub_dir_path, os.path.join(dir_path_des, sub_dir_name))        sys.stdout.write("Download data from directory[%s] to [%s] done.\n" % (dir_path_src, dir_path_des))

 

转载于:https://www.cnblogs.com/dasheng-maritime/p/8479141.html

你可能感兴趣的文章
MySQLdb & pymsql
查看>>
zju 2744 回文字符 hdu 1544
查看>>
【luogu P2298 Mzc和男家丁的游戏】 题解
查看>>
前端笔记-bom
查看>>
上海淮海中路上苹果旗舰店门口欲砸一台IMAC电脑维权
查看>>
Google透露Android Market恶意程序扫描服务
查看>>
给mysql数据库字段值拼接前缀或后缀。 concat()函数
查看>>
迷宫问题
查看>>
【FZSZ2017暑假提高组Day9】猜数游戏(number)
查看>>
泛型子类_属性类型_重写方法类型
查看>>
对闭包的理解
查看>>
练习10-1 使用递归函数计算1到n之和(10 分
查看>>
Oracle MySQL yaSSL 不明细节缓冲区溢出漏洞2
查看>>
Code Snippet
查看>>
zoj 1232 Adventure of Super Mario
查看>>
组合数学 UVa 11538 Chess Queen
查看>>
oracle job
查看>>
Redis常用命令
查看>>
[转载]电脑小绝技
查看>>
windos系统定时执行批处理文件(bat文件)
查看>>