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 相关文章推荐
Django发送html邮件的方法
May 26 Python
使用python遍历指定城市的一周气温
Mar 31 Python
举例讲解Python常用模块
Mar 08 Python
python分数表示方式和写法
Jun 26 Python
django Admin文档生成器使用详解
Jul 22 Python
Python 进程操作之进程间通过队列共享数据,队列Queue简单示例
Oct 11 Python
Python中无限循环需要什么条件
May 27 Python
Python word文本自动化操作实现方法解析
Nov 05 Python
python制作微博图片爬取工具
Jan 16 Python
Python爬虫数据的分类及json数据使用小结
Mar 29 Python
python实现股票历史数据可视化分析案例
Jun 10 Python
简单且有用的Python数据分析和机器学习代码
Jul 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操作XML、读取数据和写入数据的实现代码
2014/08/15 PHP
php字符串按照单词进行反转的方法
2015/03/14 PHP
js滚动条多种样式,推荐
2007/02/05 Javascript
js 第二代身份证号码的验证机制代码
2011/05/12 Javascript
JavaScript 函数replace深入了解
2013/03/14 Javascript
js正则表达式中test,exec,match方法的区别说明
2014/01/29 Javascript
node爬取微博的数据的简单封装库nodeweibo使用指南
2015/01/02 Javascript
jQuery实现的多级下拉菜单效果代码
2015/08/24 Javascript
js密码强度实时检测代码
2016/03/02 Javascript
快速解决Canvas.toDataURL 图片跨域的问题
2016/05/10 Javascript
DOM中事件处理概览与原理的全面解析
2016/08/16 Javascript
JavaScript数据结构之二叉查找树的定义与表示方法
2017/04/12 Javascript
Kotlin学习第一步 kotlin语法特性
2017/05/25 Javascript
webpack教程之webpack.config.js配置文件
2017/07/05 Javascript
详解vue中使用express+fetch获取本地json文件
2017/10/10 Javascript
详解React之key的使用和实践
2018/09/29 Javascript
vue2中引用及使用 better-scroll的方法详解
2018/11/15 Javascript
微信小程序使用map组件实现路线规划功能示例
2019/01/22 Javascript
解决vue中使用proxy配置不同端口和ip接口问题
2019/08/14 Javascript
JQuery 实现文件下载的常用方法分析
2019/10/29 jQuery
vue3.0 的 Composition API 的使用示例
2020/10/26 Javascript
python多线程编程方式分析示例详解
2013/12/06 Python
django站点管理详解
2017/12/12 Python
Python函数参数类型及排序原理总结
2019/12/19 Python
python opencv 图像边框(填充)添加及图像混合的实现方法(末尾实现类似幻灯片渐变的效果)
2020/03/09 Python
解决Python 异常TypeError: cannot concatenate 'str' and 'int' objects
2020/04/08 Python
用Python制作音乐海报
2021/01/26 Python
从Pytorch模型pth文件中读取参数成numpy矩阵的操作
2021/03/04 Python
正科级干部考察材料
2014/05/29 职场文书
党的群众路线教育实践活动总结材料
2014/10/30 职场文书
护士长2014年终工作总结
2014/11/11 职场文书
2014城乡环境综合治理工作总结
2014/12/19 职场文书
2015年元宵节活动总结
2015/02/06 职场文书
Go使用协程交替打印字符
2021/04/29 Golang
聊聊golang中多个defer的执行顺序
2021/05/08 Golang
win10搭建配置ftp服务器的方法
2022/08/05 Servers