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中列表的一些基本操作知识汇总
May 20 Python
python用10行代码实现对黄色图片的检测功能
Aug 10 Python
pyqt5简介及安装方法介绍
Jan 31 Python
python使用筛选法计算小于给定数字的所有素数
Mar 19 Python
python基于paramiko将文件上传到服务器代码实现
Jul 08 Python
Python企业编码生成系统之主程序模块设计详解
Jul 26 Python
Python使用configparser库读取配置文件
Feb 22 Python
浅谈Python中的异常和JSON读写数据的实现
Feb 27 Python
python属于跨平台语言码
Jun 09 Python
通过实例解析python subprocess模块原理及用法
Oct 10 Python
详解python日志输出使用配置文件格式
Feb 10 Python
python 实现两个变量值进行交换的n种操作
Jun 02 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之第六天
2006/10/09 PHP
文件系统基本操作类
2006/11/23 PHP
php 数据库字段复用的基本原理与示例
2011/07/22 PHP
PHP数据类型之布尔型的介绍
2013/04/28 PHP
ThinkPHP3.1新特性之Action参数绑定
2014/06/19 PHP
php中的ini配置原理详解
2014/10/14 PHP
php基于mcrypt的加密解密实例
2014/10/27 PHP
PHP输出一个等腰三角形的方法
2015/05/12 PHP
PHP实现的最大正向匹配算法示例
2017/12/19 PHP
Laravel如何使用Redis共享Session
2018/02/23 PHP
浅谈Laravel POST,PUT,PATCH 路由的区别
2019/10/15 PHP
深入理解JavaScript系列(4) 立即调用的函数表达式
2012/01/15 Javascript
jQuery动画效果-slideUp slideDown上下滑动示例代码
2013/08/28 Javascript
jQuery的one()方法用法实例
2015/01/19 Javascript
JS获取图片高度宽度的方法分享
2015/04/17 Javascript
jQuery实现分章节锚点“回到顶部”动画特效代码
2015/10/23 Javascript
Jquery获取radio选中的值
2017/05/05 jQuery
AngularJS路由Ui-router模块用法示例
2017/05/29 Javascript
javascript实现QQ空间相册展示源码
2017/12/12 Javascript
node.js读取Excel数据(下载图片)的方法示例
2018/08/02 Javascript
iphone刘海屏页面适配方法
2019/05/07 Javascript
jsonp格式前端发送和后台接受写法的代码详解
2019/11/07 Javascript
Python def函数的定义、使用及参数传递实现代码
2014/08/10 Python
Python fileinput模块使用实例
2015/05/28 Python
Python解析json文件相关知识学习
2016/03/01 Python
python安装gdal的两种方法
2019/10/29 Python
Python pandas如何向excel添加数据
2020/05/22 Python
英国高档百货连锁店:John Lewis
2017/11/20 全球购物
Lentiamo荷兰:在线订购隐形眼镜、隐形眼镜液和太阳镜
2019/10/25 全球购物
如何手工释放资源
2013/12/15 面试题
效能监察建议书
2014/05/19 职场文书
党的群众路线教育实践活动批评与自我批评发言稿
2014/10/16 职场文书
课外活动实习计划
2015/01/19 职场文书
幼儿园端午节活动总结
2015/05/05 职场文书
七年级生物教学反思
2016/02/20 职场文书
Python道路车道线检测的实现
2021/06/27 Python