基于Python实现ssh兼sftp客户端

 

by:授客 QQ:1033553122

otherTools.py

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


__author__
=
'laifuyu'


import

os
import

subprocess

class

OtherTools:
    def

__init__(self):
        self.filepath_list
= []

#
批量创建目录

    def

mkdirs_once_many(self,
path):
        path
= os.path.normpath(path)  #
去掉路径最右侧的 \\
、/

        path
= path.replace('\\',

'/'
)

# 将所有的\\转为/,避免出现转义字符串


        head,
tail = os.path.split(path)
        new_dir_path
=
''  
#
反转后的目录路径

        root
=
''  
#根目录

        if
not

os.path.isdir(path)
and

os.path.isfile(path):  #
如果path指向的是文件,则继续分解文件所在目录

            head,
tail = os.path.split(head)

if

tail ==
''
:
            return

        while

tail:
            new_dir_path
= new_dir_path + tail +
'/'

            head,
tail = os.path.split(head)
            root
= head
        else:
            new_dir_path
= root + new_dir_path

#
批量创建目录

            new_dir_path
= os.path.normpath(new_dir_path)
            head,
tail = os.path.split(new_dir_path)
            temp
=
''

            while

tail:
                temp
= temp +
'/'

+ tail
                dir_path
= root + temp
                if
not

os.path.isdir(dir_path):
                    os.mkdir(dir_path)
                head,
tail = os.path.split(head)


# 测试

ssh_client
= MySSHClient()
ssh_client.connect(hostname='192.168.1.102',

port=22,

username='root',password='huozhe')
ssh_client.exec_command('ls
-l'
)

ssh_client.download_file('/root/dirForDownload/file',

'./test1.txt'
)
ssh_client.download_file('/root/dirForDownload/file',

'.
\test2.txt')
ssh_client.download_file('/root/dirForDownload/file',

'd:
\\test3.txt')
ssh_client.download_file('/root/dirForDownload/file',

'd:
\test4.txt')
ssh_client.download_file('/root/dirForDownload/file',

'd:\mytest4.txt'
)
ssh_client.download_file('/root/dirForDownload/file',

'd:/test5.txt'
)
ssh_client.download_file('/root/dirForDownload/file',

'd:\dir1\dir2
\test6.txt')

ssh_client.upload_file('./test1.txt','/root/test1.txt'

)
ssh_client.upload_file('d:\mytest4.txt','/root/mytestfile.txt'

)
ssh_client.upload_file('d:\dir1\dir2\test6.txt','./test6.txt'

)
ssh_client.close()

运行结果:

注意事项

# 1. 下载文件
#
1) 不支持目录级的下载,即只能下载指定的单个非目录文件
#
2) 本地目标文件路径只支持文件路径,不支持目录(比如 localpath='d:\\'),目标文件所在的上级路径可以不存在(但路径必须位于分区下)
#
比如欲下载到本地路径:d:\dir1\dir2\test.txt, d:\dir1\dir2\可以不存在
#
3) 本地目标文件支持相对路径,比如./text.txt,远程目标文件仅支持绝对路径

#
2. 上传文件
#
1) 不支持目录级的上传,只能上传指定的单个文件
#
2) 远程目标文件所在的上级路径必须存在,比如remotepath='/root/dir1/tarfile' ,其中/root/dir1必须存在
#
3) 远程目标文件、本地文件路径都支持相对路径,比如./text.txt

#
3. 重复下载文件、上传文件,会自动覆盖已经下载的文件、已上传的文件

参考文档:

http://docs.paramiko.org/en/2.4/api/channel.html

http://docs.paramiko.org/en/2.4/api/sftp.html#paramiko.sftp_client.SFTPClient

Python 基于Python实现的ssh兼sftp客户端(下)的更多相关文章

  1. Python 基于Python实现的ssh兼sftp客户端(上)

    基于Python实现的ssh兼sftp客户端   by:授客 QQ:1033553122 实现功能 实现ssh客户端兼ftp客户端:实现远程连接,执行linux命令,上传下载文件 测试环境 Win7 ...

  2. Python 基于Python及zookeeper实现简单分布式任务调度系统设计思路及核心代码实现

    基于Python及zookeeper实现简单分布式任务调度系统设计思路及核心代码实现   by:授客 QQ:1033553122 测试环境 功能需求 实现思路 代码实践(关键技术点实现) 代码模块组织 ...

  3. Python 基于python操纵zookeeper介绍

    基于python操纵zookeeper介绍 by:授客  QQ:1033553122 测试环境 Win7 64位 Python 3.3.4 kazoo-2.6.1-py2.py3-none-any.w ...

  4. Python 基于Python结合pykafka实现kafka生产及消费速率&主题分区偏移实时监控

    基于Python结合pykafka实现kafka生产及消费速率&主题分区偏移实时监控   By: 授客 QQ:1033553122   1.测试环境 python 3.4 zookeeper- ...

  5. Python 基于Python从mysql表读取千万数据实践

    基于Python 从mysql表读取千万数据实践   by:授客 QQ:1033553122 场景:   有以下两个表,两者都有一个表字段,名为waybill_no,我们需要从tl_waybill_b ...

  6. Python基于Python实现批量上传文件或目录到不同的Linux服务器

    基于Python实现批量上传文件或目录到不同的Linux服务器   by:授客 QQ:1033553122 实现功能 1 测试环境 1 使用方法 1 1. 编辑配置文件conf/rootpath_fo ...

  7. Python 基于python编写一些算法程序等

    基于python编写一些算法程序等 by:授客 QQ:1033553122 QQ群:7156436 没特意去研究,只是这对群友在QQ群里(7156436)提出的一些小程序实现.编程题,算法.问题等,本 ...

  8. Python 基于python+mysql浅谈redis缓存设计与数据库关联数据处理

    基于python+mysql浅谈redis缓存设计与数据库关联数据处理 by:授客  QQ:1033553122 测试环境 redis-3.0.7 CentOS 6.5-x86_64 python 3 ...

  9. Python 基于python操纵redis入门介绍

    基于python操纵redis入门介绍 by:授客  QQ:1033553122 测试环境 redis-3.0.7 CentOS 6.5-x86_64 python 3.3.2 基于Python操作R ...

随机推荐

  1. ubuntu中minicom安装和使用

    想要对嵌入式开发板进行开发和操作,都需要进行文件传输或者是控制,这时基本都是需要通过串口线或者是网线进行连接的,在Windows下是使用超级终端通过串口对开发板进行操作的,而在Linux下,最后最常见 ...

  2. 签名时出错: 未在路径 C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\bin

    在运行winform程序时,由于清理解决方案等缘故,出现了下面的情况 解决办法:项目-属性-签名-取消勾选“为ClickOne清单签名” 问题完美解决

  3. eos开发(三)使用cleos命令行客户端操作EOS——关于钱包wallet和账户account

    好了,上一节我们已经讲了关于wallet的一些基础操作,基本了解了怎么去创建一个钱包,怎么去查看钱包.上锁和解锁钱包等,这一节咱们就来开始操作账户account吧. 上一节讲到了每一个account都 ...

  4. mysql 开发进阶篇系列 4 SQL 优化(各种优化方法点)

    1 通过handler_read 查看索引使用情况 如果索引经常被用到 那么handler_read_key的值将很高,这个值代表了一个行被索引值读的次数, 很低的值表明增加索引得到的性能改善不高,索 ...

  5. mysql 开发基础系列18 存储过程和函数(下)

    1. 光标的使用(游标) 在存储过程和函数中可以使用光标对结果集进行循环的处理,光标使用包括光标的声明,open ,fetch,close. 下面在存储过程中使用一个光标, 这个举例中光标里的逻辑不重 ...

  6. Mybatis 源码简述

    转载请注明来自:http://www.cnblogs.com/xmzJava/p/8578399.html 日常开发中,mybatis如果报错了调错起来会比较麻烦,因为一层套着一层,如果没有对myba ...

  7. centos 7 linux 安装与卸载 tomcat 7

    一.声明 本文采用操作系统版本: Centos 7 Linux系统 版本源:CentOS-7-x86_64-DVD-1708.iso 官网下载地址:http://isoredirect.centos. ...

  8. 想入职阿里的Java开发者必看,阿里巴巴面试官实战经验分享!

    最近社区Java技术进阶群的小伙伴总是会问,如何面试阿里Java技术岗,需要什么条件,做哪些准备:小编就这些问题找到了阿里技术团队中在一线真正带Java开发团队并直接参与技术面试的专家,分享了自身在筛 ...

  9. Maven三种仓库的配置

    转自:https://www.cnblogs.com/jack1995/p/6925879.html Maven三种仓库的配置 1 本地仓库的配置 在第一篇中我们介绍过,Maven的仓库有三类,这里不 ...

  10. 值得关注的10个python语言博客

    大家好,还记得我当时学习python的时候,我一直努力地寻找关于python的博客,但我发现它们的数量很少.这也是我建立这个博客的原因,向大家分享我自己学到的新知识.今天我向大家推荐10个值得我们关注 ...