Python实现简单的文件传输与MySQL备份的脚本分享


Posted in Python onJanuary 03, 2016

用python实现简单Server/Client文件传输:

服务器端:

#!/usr/bin/python
import SocketServer, time
class MyServer(SocketServer.BaseRequestHandler):
userInfo = {
'leonis' : 'leonis',
'hudeyong' : 'hudeyong',
'mudan' : 'mudan' }
def handle(self):
print 'Connected from', self.client_address
while True:
receivedData = self.request.recv(8192)
if not receivedData:
continue
elif receivedData == 'Hi, server':
self.request.sendall('hi, client')
elif receivedData.startswith('name'):
self.clientName = receivedData.split(':')[-1]
if MyServer.userInfo.has_key(self.clientName):
self.request.sendall('valid')
else:
self.request.sendall('invalid')
elif receivedData.startswith('pwd'):
self.clientPwd = receivedData.split(':')[-1]
if self.clientPwd == MyServer.userInfo[self.clientName]:
self.request.sendall('valid')
time.sleep(5)
sfile = open('down.sh', 'rb')
while True:
data = sfile.read(1024)
if not data:
break
while len(data) > 0:
intSent = self.request.send(data)
data = data[intSent:]
time.sleep(3)
self.request.sendall('EOF')
else:
self.request.sendall('invalid')
elif receivedData == 'bye':
break
self.request.close()
print 'Disconnected from', self.client_address
print
if __name__ == '__main__':
print 'Server is started\nwaiting for connection…\n'
srv = SocketServer.ThreadingTCPServer(('ip', 50000), MyServer)
srv.serve_forever()

客户端:

import socket, time
class MyClient:
def __init__(self):
print 'Prepare for connecting…'
def connect(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: Do you want get the 'thinking in python' file?(y/n):")
if self.s == 'y':
while True:
self.name = raw_input('Server: input our name:')
sock.sendall('name:' + self.name.strip())
self.response = sock.recv(8192)
if self.response == 'valid':
break
else:
print 'Server: Invalid username'
while True:
self.pwd = raw_input('Server: input our password:')
sock.sendall('pwd:' + self.pwd.strip())
self.response = sock.recv(8192)
if self.response == 'valid':
print 'please wait…'
f = open('down.sh', 'wb')
while True:
data = sock.recv(1024)
if data == 'EOF':
break
f.write(data)
f.flush()
f.close()
print 'download finished'
break
else:
print 'Server: Invalid password'
sock.sendall('bye')
sock.close()
print 'Disconnected'
if __name__ == '__main__':
client = MyClient()
client.connect()

由于担心服务器数据安全,所以写了这个脚本,结合上面分享的Server/Client 文件互传,可以备份网站数据到本地,安全又可靠

#!/usr/bin/python
# Filename: webbak.py
import os
import time
import tarfile
 
os.chdir('/home/web/') #切换目录
source = 'leonis'
bakdir = '/home/web/leonis/'
# mysql dump
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)
if os.path.exists(sqlfile): 
  os.remove(sqlfile)
else:
  print 'then will dump sql file'
result = os.popen(sql)
if result:       #
 print ("SQL backup completed!")
else:
 print ("SQL backup failed!")
# gzip 压缩 以当日日期命名
filename = bakdir + time.strftime('%Y%m%d')+'.tar.gz'
tar = tarfile.open(filename,"w:gz")
tar.add(source)
tar.close()
Python 相关文章推荐
python实现对象列表根据某个属性排序的方法详解
Jun 11 Python
对python3 sort sorted 函数的应用详解
Jun 27 Python
解决win7操作系统Python3.7.1安装后启动提示缺少.dll文件问题
Jul 15 Python
ORM Django 终端打印 SQL 语句实现解析
Aug 09 Python
浅谈Python 敏感词过滤的实现
Aug 15 Python
Python argparse模块应用实例解析
Nov 15 Python
Python高级编程之继承问题详解(super与mro)
Nov 19 Python
python之array赋值技巧分享
Nov 28 Python
python进程的状态、创建及使用方法详解
Dec 06 Python
在python image 中实现安装中文字体
May 16 Python
Python flask路由间传递变量实例详解
Jun 03 Python
树莓派升级python的具体步骤
Jul 05 Python
简单介绍Python中的几种数据类型
Jan 02 #Python
简单实现python爬虫功能
Dec 31 #Python
python实现颜色空间转换程序(Tkinter)
Dec 31 #Python
基于python的Tkinter实现一个简易计算器
Dec 31 #Python
python实现爬虫统计学校BBS男女比例之数据处理(三)
Dec 31 #Python
python实现爬虫统计学校BBS男女比例之多线程爬虫(二)
Dec 31 #Python
python实现爬虫统计学校BBS男女比例(一)
Dec 31 #Python
You might like
php session和cookie使用说明
2010/04/07 PHP
多个PHP中文字符串截取函数
2013/11/12 PHP
javascript学习笔记(十) js对象 继承
2012/06/19 Javascript
js中typeof的用法汇总
2013/12/12 Javascript
jQuery 获取兄弟元素的几种不错方法
2014/05/23 Javascript
谷歌地图打不开的解决办法
2014/08/07 Javascript
javascript模拟评分控件实现方法
2015/05/13 Javascript
基于jQuery实现动态数字展示效果
2015/08/12 Javascript
js中unicode转码方法详解
2015/10/09 Javascript
JavaScript中rem布局在react中的应用
2015/12/09 Javascript
深入浅出 jQuery中的事件机制
2016/08/23 Javascript
input获取焦点时底部菜单被顶上来问题的解决办法
2017/01/24 Javascript
基于javascript的异步编程实例详解
2017/04/10 Javascript
JS使用ActiveXObject实现用户提交表单时屏蔽敏感词功能
2017/06/20 Javascript
AngularJS中filter的使用实例详解
2017/08/25 Javascript
Angular之toDoList的实现代码示例
2017/12/02 Javascript
浅谈es6中export和export default的作用及区别
2018/02/07 Javascript
原生js实现form表单序列化的方法
2018/08/02 Javascript
Bootstrap Table 双击、单击行获取该行及全表内容
2018/08/31 Javascript
ES2020系列之空值合并运算符 '??'
2020/07/22 Javascript
JavaScript事件委托实现原理及优点进行
2020/08/29 Javascript
[04:37]DOTA2英雄梦之声Vol20发条
2014/06/20 DOTA
深入理解python函数递归和生成器
2016/06/06 Python
Python中的二维数组实例(list与numpy.array)
2018/04/13 Python
详谈python3中用for循环删除列表中元素的坑
2018/04/19 Python
如何通过python的fabric包完成代码上传部署
2019/07/29 Python
美国在线眼镜商城:Eyeglasses.com
2017/06/26 全球购物
瑞典轮胎在线:Tirendo.se
2018/06/21 全球购物
大专应届生个人简历的自我评价
2013/10/15 职场文书
国培教师自我鉴定
2014/02/12 职场文书
中国好声音广告词
2014/03/18 职场文书
竞聘书模板
2014/03/31 职场文书
2015年基层党支部工作总结
2015/05/21 职场文书
资深HR教你写好简历中的自我评价
2019/05/07 职场文书
mysql 8.0.24版本安装配置方法图文教程
2021/05/12 MySQL
再也不用花钱买漫画!Python爬取某漫画的脚本及源码
2021/06/09 Python