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 相关文章推荐
使用FastCGI部署Python的Django应用的教程
Jul 22 Python
浅述python中argsort()函数的实例用法
Mar 30 Python
Python爬虫框架scrapy实现downloader_middleware设置proxy代理功能示例
Aug 04 Python
python2.7和NLTK安装详细教程
Sep 19 Python
python 用opencv调用训练好的模型进行识别的方法
Dec 07 Python
基于python的ini配置文件操作工具类
Apr 24 Python
使用 Python 快速实现 HTTP 和 FTP 服务器的方法
Jul 22 Python
深入浅析Python 中的sklearn模型选择
Oct 12 Python
Python txt文件常用读写操作代码实例
Aug 03 Python
Python xmltodict模块安装及代码实例
Oct 05 Python
用sleep间隔进行python反爬虫的实例讲解
Nov 30 Python
Flask中jinja2的继承实现方法及实例
Mar 03 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使用get_headers函数判断远程文件是否存在的方法
2014/11/28 PHP
php封装的连接Mysql类及用法分析
2015/12/10 PHP
YII Framework框架教程之国际化实现方法
2016/03/14 PHP
php版阿里大于(阿里大鱼)短信发送实例详解
2016/11/30 PHP
利用PHPExcel读取Excel的数据和导出数据到Excel
2017/05/12 PHP
Laravel中日期时间处理包Carbon的简单使用
2017/09/21 PHP
游戏人文件夹程序 ver 3.0
2006/07/14 Javascript
网页禁用右键实现代码(JavaScript代码)
2009/10/29 Javascript
js cookies实现简单统计访问次数
2009/11/24 Javascript
Firefox和IE兼容性问题及解决方法总结
2013/10/08 Javascript
window.open不被拦截的简单实现代码(推荐)
2016/08/04 Javascript
Angular X中使用ngrx的方法详解(附源码)
2017/07/10 Javascript
VueJs单页应用实现微信网页授权及微信分享功能示例
2017/07/26 Javascript
JS沙箱模式实例分析
2017/09/04 Javascript
vue项目中使用lib-flexible解决移动端适配的问题解决
2018/08/23 Javascript
koa源码中promise的解读
2018/11/13 Javascript
Vuex模块化应用实践示例
2020/02/03 Javascript
vue项目打包后提交到git上为什么没有dist这个文件的解决方法
2020/09/16 Javascript
[04:49]2014DOTA2国际邀请赛 Newbee顺利挺进总决赛 ImbaTV独家专访
2014/07/19 DOTA
python提取页面内url列表的方法
2015/05/25 Python
Python实现LRU算法的2种方法
2015/06/24 Python
Python中的下划线详解
2015/06/24 Python
Python的SimpleHTTPServer模块用处及使用方法简介
2018/01/22 Python
基于python的图片修复程序(实现水印去除)
2018/06/04 Python
python中dict使用方法详解
2019/07/17 Python
Scrapy项目实战之爬取某社区用户详情
2020/09/17 Python
专注澳大利亚特产和新西兰特产的澳洲中文网:0061澳洲制造
2019/03/24 全球购物
MVC的各个部分都有那些技术来实现?如何实现?
2016/04/21 面试题
户外活动总结范文
2014/04/30 职场文书
企业形象策划方案
2014/05/29 职场文书
ktv周年庆活动方案
2014/08/18 职场文书
商业用房租赁协议书
2014/10/13 职场文书
2016八一建军节慰问信
2015/11/30 职场文书
Go语言基础切片的创建及初始化示例详解
2021/11/17 Golang
面试中老生常谈的MySQL问答集锦夯实基础
2022/03/13 MySQL
前端使用svg图片改色实现示例
2022/07/23 HTML / CSS