1 from ftplib import * 2 import os,readline 3 import sys 4 class MyFtp: 5 ftp = FTP() #建立一个ftp对象的链接 6 def __init__(self, host, port='21'): #构造函数初始化 7 self.ftp.connect(host=host,timeout=100) #连接ftp服务器 8 def Login(self, user, passwd): #登录函数 9 self.ftp.login(user=user, passwd=passwd ) 10 print (self.ftp.welcome) #登陆成功后ftp显示欢迎信息11 12 def DownLoadFile(self, LocalFilePath, RemoteFilePath):13 file = open(LocalFilePath, 'wb')14 self.ftp.retrbinary( "RETR %s" %( RemoteFilePath ), file.write ) #下载文件到本地15 file.close()16 return True17 18 def DownLoadFileTree(self, LocalFileDir, RemoteFileDir):19 if os.path.isdir( LocalfileDir ) == False: #如果传入本地的不是目录20 os.makedirs(LocalFileDir) #就在本地新建该目录21 self.ftp.cwd(RemoteFileDir) #切换到远程目录22 RemoteFiles = self.ftp.nlst() #把远程目录里的所有文件都传给 RemoteFiles变量23 for file in RemoteFiles:24 Local = os.path.join(LocalFilesDir, file )25 chang = os.path.join(RemoteDir,file )26 if self.IsDir(chang):27 self.DownLoadFileTree(Local, chang)28 else:29 self.DownLoadFile( Local, chang)30 self.ftp.cwd( ".." )31 32 def IsDir(self, path):33 if os.path.isdir(path) == True:34 self.juge = True35 else:36 self.juge = False37 return self.juge38 39 def UpLoadFileTree(self, LocalFileDir, RemoteFileDir):40 if os.path.isdir(LocalFileDir) == False:41 print( 'wrong !Please Input Dir')42 if os.path.isdir(RemoteFileDir) == False:43 os.makedirs(RemoteFileDir)44 LocalFiles = os.listdir(LocalFileDir)45 self.ftp.cwd(RemoteFileDir)46 for Local in LocalFiles:47 src = os.path.join( LocalFileDir, Local)48 chang = os.path.join(RemoteFileDir,Local)49 if os.path.isdir(src):50 self.UpLoadFileTree(src,chang)51 else:52 self.UpLoadFile(src,chang)53 self.ftp.cwd( ".." )54 55 def UpLoadFile(self, LocalFilePath, RemoteFilePath):56 if os.path.isfile( LocalFilePath ) == False:57 return False58 file = open(LocalFile, "rb")59 self.ftp.storbinary('STOR %s'%RemoteFile, file, 4096)60 file.close()61 62 63 ftp = myFtp('192.168.19.153') #实例化64 65 def Login():66 ftp.Login('root','root') 67 def Update():68 print('\033[34mUping.....\033[m')69 ftp.UpLoadFileTree('main', "/xxx" )70 print('Done')71 def DownLoad():72 print('\033[34mDowning.....\033[m')73 ftp.DownLoadFileTree('localDir','remoteDir')74 print ('Done')75 def Close():76 self.ftp.quit()77 78 def Menu():79 print ("""\033[;32mWelcome \033[0m\n""")80 print ("\t(1) Login")81 print ("\t(2) Update")82 print ("\t(3) DownLoad")83 print ("\t(4) close")84 while True:85 choices = raw_input('\033[32mChoice>>\033[m').strip()86 if len(choices) == 0:continue87 if choices == '1':Login()88 elif choices == '2':Update()89 elif choices == '3':DownLoad()90 elif choices == '4':close()91 92 Menu()