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()