在讲paramiko模块的sftp方法之前,先介绍一个自带系统模块os中的listdir方法。
import os #引入os模块
path='e:/soft' #将要检索的路径赋值给path变量
mylist=os.listdir(path) #调用os.listdir方法 参数为path 并将结果赋值给mylist
print(mylist) #打印下mylist看看
返回了一个列表
去我的电脑里看看e盘中的soft里面到底有什么把
没有错,os.listdir的作用就是将目录中的文件逐一放到一个列表当中,这样我们就可以调用目录中的文件名,为之后上传文件作好准备
接下来讲一下本文的重点paramiko模块,paramiko模块是一个功能非常强大的模块,这里只简单介绍其中的几个方法,利用这些方法我们就可以很容易做到sftp上传文件了,如果想学习更多的好用的方法,可以持续关注博主哦,博主会持续更新的
接下来引入paramiko模块,paramiko模块不是一个自带的模块,所以需要先用pip下载下来(cmd去下载)
pip install paramiko
看一下最后成果代码
这里解释下几个关键用法
transport = paramiko.Transport(IP地址,端口号))
transport.connect(username=‘root’,password=‘123456’) 这个很好理解,连接主机的账号和密码
sftp.put(windows端上传的文件路径,要传到的linux目标端的路径)
例如 sftp.put(‘e:/soft/p13390677_112040_Linux-x86-64_1of7.zip’,’/tmp/p13390677_112040_Linux-x86-64_1of7.zip’)
import os #引入os模块
import paramiko #引入paramiko代码
path='e:/soft' #赋值路径
mylist=os.listdir(path) #赋值列表(列表的索引从0开始)
transport = paramiko.Transport(('192.168.33.172',22)) #打开通道
transport.connect(username='root',password='123456') #开始连接
sftp = paramiko.SFTPClient.from_transport(transport) #打开sftp客户端
count=0 #用来计数
while count<len(mylist): #如果列表里有多个值 则一一循环
print("正在传输:"+mylist[count]) #循环开始时打印正在传输的文件名
sftp.put(path+'/'+mylist[count],'/tmp/'+mylist[count])
print(mylist[count]+'传输完成') #传输完成后打印传输完成的文件名
count=count+1 #每次上传完一个文件计数+1
transport.close() #当传输结束之后关闭通道
已经上传到linux端啦
这样还太麻烦,那每次换文件我都要去改代码,可以将写死的值换成输入变量的方式,如下:
import os #导入os模块
import paramiko
path=input('输入windows的路径:')
path2=input('输入linux的路径: ')
ip=input('输入ip: ')
ssh_port=int(input('输入端口号: '))
mylist=os.listdir(path)
transport = paramiko.Transport((ip,ssh_port))
transport.connect(username='root',password='123456')
sftp = paramiko.SFTPClient.from_transport(transport)
count=0
while count<len(mylist):
print("正在传输:"+mylist[count])
sftp.put(path+'/'+mylist[count],path2+'/'+mylist[count])
print(mylist[count]+'传输完成')
count=count+1
transport.close()
这样一个简易的sftp工具已经完成啦,不过这样的程序还是依赖于python3环境,那有没有办法将这个程序打包成一个.exe文件,即使没有python环境也能用呢?答案是可以的,下篇博客将介绍python打包exe工具