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', '.\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()

运行结果:

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

 


注意事项

# 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

posted @ 2017-12-24 20:51  授客  阅读(259)  评论(0编辑  收藏  举报