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