zoukankan      html  css  js  c++  java
  • Python 基于Python实现的ssh兼sftp客户端(下)

     基于Python实现sshsftp客户端

     

    by:授客 QQ1033553122

    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', '. est2.txt')
    ssh_client.download_file('/root/dirForDownload/file', 'd:\test3.txt')
    ssh_client.download_file('/root/dirForDownload/file', 'd: est4.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:dir1dir2 est6.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:dir1dir2 est6.txt','./test6.txt' )
    ssh_client.close()

    运行结果:

    Python <wbr>基于Python实现的ssh兼sftp客户端(下)


    注意事项

    # 1. 下载文件
    # 1) 不支持目录级的下载,即只能下载指定的单个非目录文件
    # 2) 本地目标文件路径只支持文件路径,不支持目录(比如 localpath='d:\'),目标文件所在的上级路径可以不存在(但路径必须位于分区下)
    # 比如欲下载到本地路径:d:dir1dir2 est.txt, d:dir1dir2可以不存在
    # 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

  • 相关阅读:
    【Java】关于Spring框架的总结 (三)
    【Java】关于Spring框架的总结 (二)
    【Java】关于Spring框架的总结 (一)
    关于各编程语言冒泡排序的实现
    【Java】关于MyBatis框架的总结
    Linux 查看服务器开放的端口号
    网络安全随笔
    Window随笔
    Linux随笔
    Powercli随笔
  • 原文地址:https://www.cnblogs.com/shouke/p/10157530.html
Copyright © 2011-2022 走看看