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的绘图工具matplotlib使用实例
Jul 03 Python
Python批量创建迅雷任务及创建多个文件
Feb 13 Python
Python爬虫框架Scrapy基本用法入门教程
Jul 26 Python
详解从Django Rest Framework响应中删除空字段
Jan 11 Python
Python3 pip3 list 出现 DEPRECATION 警告的解决方法
Feb 16 Python
基于h5py的使用及数据封装代码
Dec 26 Python
Python写出新冠状病毒确诊人数地图的方法
Feb 12 Python
python GUI库图形界面开发之PyQt5打印控件QPrinter详细使用方法与实例
Feb 28 Python
python绘制玫瑰的实现代码
Mar 02 Python
PyCharm最新激活码PyCharm2020.2.3有效
Nov 18 Python
python 实现Requests发送带cookies的请求
Feb 08 Python
Python Pandas读取Excel日期数据的异常处理方法
Feb 28 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
第三节--定义一个类
2006/11/16 PHP
9个PHP开发常用功能函数小结
2011/07/15 PHP
php按单词截取字符串的方法
2015/04/07 PHP
Thinkphp实现自动验证和自动完成
2015/12/19 PHP
php生成图片验证码的方法
2016/04/15 PHP
showModelessDialog()使用详解
2006/09/21 Javascript
求解开jscript.encode代码的asp函数
2007/02/28 Javascript
写入cookie的JavaScript代码库 cookieLibrary.js
2009/10/24 Javascript
jquery判断RadioButtonList和RadioButton中是否有选中项示例
2013/09/29 Javascript
屏蔽相应键盘按钮操作
2014/03/10 Javascript
JS和JQ的event对象区别分析
2014/11/24 Javascript
JQuery显示隐藏页面元素的方法总结
2015/04/16 Javascript
JS实现输入框提示文字点击时消失效果
2016/07/19 Javascript
Centos7 中安装 Node.js v4.4.4
2016/11/03 Javascript
Bootstrap table表格简单操作
2017/02/07 Javascript
随机生成10个不重复的0-100的数字(实例讲解)
2017/08/16 Javascript
微信小程序全局变量功能与用法详解
2019/01/22 Javascript
在layui框架中select下拉框监听更改事件的例子
2019/09/20 Javascript
Vue的click事件防抖和节流处理详解
2019/11/13 Javascript
javascript自定义右键菜单插件
2019/12/16 Javascript
js操作两个json数组合并、去重,以及删除某一项元素
2020/09/22 Javascript
[49:35]2018DOTA2亚洲邀请赛3月30日 小组赛A组 KG VS TNC
2018/03/31 DOTA
Python 字典(Dictionary)操作详解
2014/03/11 Python
Python从Excel中读取日期一列的方法
2018/11/28 Python
pandas实现将dataframe满足某一条件的值选出
2019/06/12 Python
Python实现变声器功能(萝莉音御姐音)
2019/12/05 Python
python目标检测给图画框,bbox画到图上并保存案例
2020/03/10 Python
Python 添加文件注释和函数注释操作
2020/08/09 Python
五个2015 年最佳HTML5 框架
2015/11/11 HTML / CSS
日本土著品牌,综合型购物网站:Cecile
2016/08/23 全球购物
教导处工作制度
2014/01/18 职场文书
留学自荐信写作方法
2014/01/27 职场文书
学生干部学习的自我评价
2014/02/18 职场文书
村干部培训方案
2014/05/02 职场文书
酒店工程部岗位职责
2015/02/12 职场文书
HTML 里 img 元素的 src 和 srcset 属性的区别详解
2023/05/21 HTML / CSS