Python实现简单的文件传输与MySQL备份的脚本分享
用python实现简单Server/Client文件传输:
服务器端:
#!/usr/bin/python importSocketServer,time classMyServer(SocketServer.BaseRequestHandler): userInfo={ 'leonis':'leonis', 'hudeyong':'hudeyong', 'mudan':'mudan'} defhandle(self): print'Connectedfrom',self.client_address whileTrue: receivedData=self.request.recv(8192) ifnotreceivedData: continue elifreceivedData=='Hi,server': self.request.sendall('hi,client') elifreceivedData.startswith('name'): self.clientName=receivedData.split(':')[-1] ifMyServer.userInfo.has_key(self.clientName): self.request.sendall('valid') else: self.request.sendall('invalid') elifreceivedData.startswith('pwd'): self.clientPwd=receivedData.split(':')[-1] ifself.clientPwd==MyServer.userInfo[self.clientName]: self.request.sendall('valid') time.sleep(5) sfile=open('down.sh','rb') whileTrue: data=sfile.read(1024) ifnotdata: break whilelen(data)>0: intSent=self.request.send(data) data=data[intSent:] time.sleep(3) self.request.sendall('EOF') else: self.request.sendall('invalid') elifreceivedData=='bye': break self.request.close() print'Disconnectedfrom',self.client_address print if__name__=='__main__': print'Serverisstarted\nwaitingforconnection…\n' srv=SocketServer.ThreadingTCPServer(('ip',50000),MyServer) srv.serve_forever()
客户端:
importsocket,time classMyClient: def__init__(self): print'Prepareforconnecting…' defconnect(self): sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM) sock.connect(('ip',50000)) sock.sendall('Hi,server') self.response=sock.recv(8192) print'Server:',self.response self.s=raw_input("Server:Doyouwantgetthe'thinkinginpython'file?(y/n):") ifself.s=='y': whileTrue: self.name=raw_input('Server:inputourname:') sock.sendall('name:'+self.name.strip()) self.response=sock.recv(8192) ifself.response=='valid': break else: print'Server:Invalidusername' whileTrue: self.pwd=raw_input('Server:inputourpassword:') sock.sendall('pwd:'+self.pwd.strip()) self.response=sock.recv(8192) ifself.response=='valid': print'pleasewait…' f=open('down.sh','wb') whileTrue: data=sock.recv(1024) ifdata=='EOF': break f.write(data) f.flush() f.close() print'downloadfinished' break else: print'Server:Invalidpassword' sock.sendall('bye') sock.close() print'Disconnected' if__name__=='__main__': client=MyClient() client.connect()
由于担心服务器数据安全,所以写了这个脚本,结合上面分享的Server/Client文件互传,可以备份网站数据到本地,安全又可靠
#!/usr/bin/python #Filename:webbak.py importos importtime importtarfile os.chdir('/home/web/')#切换目录 source='leonis' bakdir='/home/web/leonis/' #mysqldump dump='mysqldump' dbuser='XXXXXXX' dbpwd='XXXXXXXXXXX' dbname='XXXXXXXX' sqlfile='/home/web/leonis/leonis.sql' sql="%s-u%s-p%s%s>%s"%(dump,dbuser,dbpwd,dbname,sqlfile) ifos.path.exists(sqlfile): os.remove(sqlfile) else: print'thenwilldumpsqlfile' result=os.popen(sql) ifresult:# print("SQLbackupcompleted!") else: print("SQLbackupfailed!") #gzip压缩以当日日期命名 filename=bakdir+time.strftime('%Y%m%d')+'.tar.gz' tar=tarfile.open(filename,"w:gz") tar.add(source) tar.close()