【背景】遠程下載發布包等文件時,總是要使用WinSCP等工具登陸拖動。今天就介紹一種使用python下載文件到本地的方法。
【代碼實現】
1 import paramiko # paramiko模塊,基於SSH用於連接遠程服務器並執行相關操作 2 import os 3 4 5 def DownLoadFile(sftp, LocalFile, RemoteFile): # 下載單個文件 7 file_handler = open(LocalFile, 'wb') # wb 以二進制格式打開文件寫入 8 print(file_handler) 9 sftp.get(RemoteFile, LocalFile) # 下載目錄中文件 10 file_handler.close() 11 return True 12 13 14 def DownLoadFileTree(sftp, LocalDir, RemoteDir): # 下載整個目錄下的文件 15 if not os.path.exists(LocalDir): # 如果本地文件夾不存在,則創建它 16 os.makedirs(LocalDir) 17 for file in sftp.listdir(RemoteDir): #sftp.listdir()返回當前目錄下清單列表 18 Local = os.path.join(LocalDir, file) #os.path.join()用於拼接文件路徑 19 Remote = os.path.join(RemoteDir, file) 20 if os.path.isdir(file): # 判斷是否是文件 21 if not os.path.exists(Local): #對於文件夾:如果本地不存在,就創建該文件夾 22 os.makedirs(Local) 23 DownLoadFileTree(sftp, Local, Remote) 24 else: # 是文件 25 if os.path.splitext(Remote)[1] == '.zip': #os.path.splitext(Remote)[1]獲取文件擴展名,判斷是否為.zip文件 26 DownLoadFile(sftp, Local, Remote) #下載文件 27 print "complete!"
1 if __name__ == '__main__': 2 host = '主機名' # 主機 3 port = 端口號# 端口 4 username = '用戶名' # 用戶名 5 password = '密碼' # 密碼 6 client = paramiko.Transport((host, port)) #連接服務器 7 client.connect(username=username, password=password) 8 sftp = paramiko.SFTPClient.from_transport(client) 9 local = raw_input("please input the local path(eg.D:\\V1.6):") #輸入本地文件路徑 10 remote = '/app/...' # 遠程文件或目錄 11 DownLoadFileTree(sftp, local, remote) # 下載
代碼實現了遠程連接服務器,輸入本地路徑,就會自動下載需要的壓縮文件,比可視化工具更快捷。