importsys
importos
importjson
fromftplibimportFTP
_XFER_FILE='FILE'
_XFER_DIR='DIR'
classXfer(object):
'''''
@note: upload local file or dirs recursively to ftp server
'''
def__init__(self):
self.ftp=None
def__del__(self):
pass
defsetFtpParams(self, ip, uname, pwd, port=21, timeout=60):
self.ip=ip
self.uname=uname
self.pwd=pwd
self.port=port
self.timeout=timeout
definitEnv(self):
ifself.ftpisNone:
self.ftp=FTP()
print'### connect ftp server: %s ...'%self.ip
self.ftp.connect(self.ip,self.port,self.timeout)
self.ftp.login(self.uname,self.pwd)
printself.ftp.getwelcome()
defclearEnv(self):
ifself.ftp:
self.ftp.close()
print'### disconnect ftp server: %s!'%self.ip
self.ftp=None
defuploadDir(self, localdir='./', remotedir='./'):
ifnotos.path.isdir(localdir):
return
self.ftp.cwd(remotedir)
forfileinos.listdir(localdir):
src=os.path.join(localdir,file)
ifos.path.isfile(src):
self.uploadFile(src,file)
elifos.path.isdir(src):
try:
self.ftp.mkd(file)
except:
sys.stderr.write('the dir is exists %s'%file)
self.uploadDir(src,file)
self.ftp.cwd('..')
defuploadFile(self, localpath, remotepath='./'):
ifnotos.path.isfile(localpath):
return
print'+++ upload %s to %s:%s'%(localpath,self.ip, remotepath)
self.ftp.storbinary('STOR '+remotepath,open(localpath,'rb'))
def__filetype(self, src):
ifos.path.isfile(src):
index=src.rfind('\\')
ifindex==-1:
index=src.rfind('/')
return_XFER_FILE, src[index+1:]
elifos.path.isdir(src):
return_XFER_DIR, ''
defupload(self, src):
filetype, filename=self.__filetype(src)
self.initEnv()
iffiletype==_XFER_DIR:
self.srcDir=src
self.uploadDir(self.srcDir)
eliffiletype==_XFER_FILE:
self.uploadFile(src, filename)
self.clearEnv()
if__name__=='__main__':
srcDir=r"C:\sytst"
srcFile=r'C:\sytst\sar.c'
xfer=Xfer()
xfer.setFtpParams('192.x.x.x','jenkins','pass')
xfer.upload(srcDir)
xfer.upload(srcFile)