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获取邮件地址的方法
Jul 10 Python
详解Django框架中用户的登录和退出的实现
Jul 23 Python
用yum安装MySQLdb模块的步骤方法
Dec 15 Python
python3实现基于用户的协同过滤
May 31 Python
在PyCharm下打包*.py程序成.exe的方法
Nov 29 Python
使用python telnetlib批量备份交换机配置的方法
Jul 25 Python
利用pyshp包给shapefile文件添加字段的实例
Dec 06 Python
在python中做正态性检验示例
Dec 09 Python
如何使用python实现模拟鼠标点击
Jan 06 Python
python继承threading.Thread实现有返回值的子类实例
May 02 Python
浅谈Python协程asyncio
Jun 20 Python
Python 数据可视化之Matplotlib详解
Nov 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上传文件时文件过大$_FILES为空的解决方法
2013/11/26 PHP
php获取访问者浏览页面的浏览器类型
2017/01/23 PHP
Thinkphp5框架简单实现钩子(Hook)行为的方法示例
2019/09/03 PHP
js常用函数 不错
2006/09/08 Javascript
基于jquery的复制网页内容到WORD的实现代码
2011/02/16 Javascript
自己写的Javascript计算时间差函数
2013/10/28 Javascript
解决window.opener=null;window.close(),只支持IE6不支持IE7,IE8的问题
2014/01/14 Javascript
JavaScript中的函数的两种定义方式和函数变量赋值
2014/05/12 Javascript
js实现图片从左往右渐变切换效果的方法
2015/02/06 Javascript
JQuery判断radio(单选框)是否选中和获取选中值方法总结
2015/04/15 Javascript
JS实现li标签的删除
2019/04/12 Javascript
使用Python3中的gettext模块翻译Python源码以支持多语言
2015/03/31 Python
python中快速进行多个字符替换的方法小结
2016/12/15 Python
批量获取及验证HTTP代理的Python脚本
2017/04/23 Python
使用python Fabric动态修改远程机器hosts的方法
2018/10/26 Python
python实现AES加密解密
2019/03/28 Python
详解python中递归函数
2019/04/16 Python
Tensorflow设置显存自适应,显存比例的操作
2020/02/03 Python
Python 解决火狐浏览器不弹出下载框直接下载的问题
2020/03/09 Python
Python unittest如何生成HTMLTestRunner模块
2020/09/08 Python
python中类与对象之间的关系详解
2020/12/16 Python
使用Python获取爱奇艺电视剧弹幕数据的示例代码
2021/01/12 Python
CSS3的 fit-content实现水平居中
2017/09/07 HTML / CSS
英国50岁以上人群的交友网站:Ourtime
2018/03/28 全球购物
DeinDesign德国:设计自己的手机壳
2019/12/14 全球购物
SheIn沙特阿拉伯:女装在线
2020/03/23 全球购物
介绍一下Linux内核的排队自旋锁
2014/08/27 面试题
大学生四年生活自我鉴定
2013/11/21 职场文书
乡镇交通安全实施方案
2014/03/29 职场文书
2015年国庆节活动总结
2015/03/23 职场文书
创业计划书之个人工作室
2019/08/22 职场文书
创业计划书之小型广告公司
2019/10/22 职场文书
nginx配置ssl实现https的方法示例
2021/03/31 Servers
JavaScript 防篡改对象的用法示例
2021/04/24 Javascript
利用Python将list列表写入文件并读取的方法汇总
2022/03/25 Python
vue router 动态路由清除方式
2022/05/25 Vue.js