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中使用bidict模块双向字典结构的奇技淫巧
Jul 12 Python
利用python程序生成word和PDF文档的方法
Feb 14 Python
从DataFrame中提取出Series或DataFrame对象的方法
Nov 10 Python
Python内置random模块生成随机数的方法
May 31 Python
django之自定义软删除Model的方法
Aug 14 Python
python爬虫 2019中国好声音评论爬取过程解析
Aug 26 Python
在pycharm中关掉ipython console/PyDev操作
Jun 09 Python
Python pip install之SSL异常处理操作
Sep 03 Python
Pytest之测试命名规则的使用
Apr 16 Python
七个Python必备的GUI库
Apr 27 Python
总结Python使用过程中的bug
Jun 18 Python
Pandas实现DataFrame的简单运算、统计与排序
Mar 31 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加密函数 Javascript/Js 解密函数
2013/09/23 PHP
PHP高手需要要掌握的知识点
2014/08/21 PHP
php带抄送和密件抄送的邮件发送方法
2015/03/20 PHP
yii2中的rules 自定义验证规则详解
2016/04/19 PHP
根据json字符串生成Html的一种方式
2013/01/09 Javascript
jQuery插件的写法分享
2013/06/12 Javascript
解析Jquery取得iframe中元素的几种方法
2013/07/04 Javascript
移动端触摸滑动插件swiper使用方法详解
2017/08/11 Javascript
基于vue2.0实现简单轮播图
2017/11/27 Javascript
vue.js打包之后可能会遇到的坑!
2018/06/03 Javascript
浅谈在vue中使用mint-ui swipe遇到的问题
2018/09/27 Javascript
js实现每日签到功能
2018/11/29 Javascript
微信小程序在其他页面监听globalData中值的变化
2019/07/15 Javascript
JavaScript判断数组类型的方法
2019/10/23 Javascript
JavaScript canvas基于数组生成柱状图代码实例
2020/03/06 Javascript
使用python在校内发人人网状态(人人网看状态)
2014/02/19 Python
Python数据结构与算法之图的基本实现及迭代器实例详解
2017/12/12 Python
Django项目中用JS实现加载子页面并传值的方法
2018/05/28 Python
详解Python的循环结构知识点
2019/05/20 Python
详细介绍pandas的DataFrame的append方法使用
2019/07/31 Python
基于h5py的使用及数据封装代码
2019/12/26 Python
Pycharm github配置实现过程图解
2020/10/13 Python
浅析关于Keras的安装(pycharm)和初步理解
2020/10/23 Python
html5读取本地文件示例代码
2014/04/22 HTML / CSS
Html5基于canvas实现电子签名并生成PDF文档
2020/12/07 HTML / CSS
预订全球最佳旅行体验:Viator
2018/03/30 全球购物
瑜伽国际:Yoga International
2018/04/18 全球购物
微软台湾官方网站:Microsoft台湾
2018/08/15 全球购物
什么是组件架构
2016/05/15 面试题
学期自我鉴定范文
2013/10/01 职场文书
《美丽的南沙群岛》教学反思
2014/04/27 职场文书
生物技术专业求职信
2014/06/10 职场文书
学术会议邀请函
2015/01/30 职场文书
2015年机关后勤工作总结
2015/05/26 职场文书
请假条应该怎么写?
2019/06/24 职场文书
Django分页器的用法你都了解吗
2021/05/26 Python