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写的图片蜘蛛人代码
Aug 27 Python
python抓取网页中的图片示例
Feb 28 Python
windows下安装python的C扩展编译环境(解决Unable to find vcvarsall.bat)
Feb 21 Python
对python:threading.Thread类的使用方法详解
Jan 31 Python
Django  ORM 练习题及答案
Jul 19 Python
详解Django模版中加载静态文件配置方法
Jul 21 Python
树莓派4B+opencv4+python 打开摄像头的实现方法
Oct 18 Python
nginx+uwsgi+django环境搭建的方法步骤
Nov 25 Python
利用pyshp包给shapefile文件添加字段的实例
Dec 06 Python
django的模型类管理器——数据库操作的封装详解
Apr 01 Python
python opencv肤色检测的实现示例
Dec 21 Python
地图可视化神器kepler.gl python接口的使用方法
Dec 22 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
fleaphp常用方法分页之Pager使用方法
2011/04/23 PHP
php dirname(__FILE__) 获取当前文件的绝对路径
2011/06/28 PHP
PHP写的获取各搜索蜘蛛爬行记录代码
2012/08/21 PHP
记录PHP错误日志 display_errors与log_errors的区别
2012/10/09 PHP
php+mysqli使用预处理技术进行数据库查询的方法
2015/01/28 PHP
php+mysqli实现批量执行插入、更新及删除数据的方法
2015/01/29 PHP
PHP编程获取各个时间段具体时间的方法
2017/05/26 PHP
IE7提供XMLHttpRequest对象为兼容
2007/03/08 Javascript
Extjs学习笔记之九 数据模型(上)
2010/01/11 Javascript
JQuery 选项卡效果(JS与HTML的分离)
2010/04/01 Javascript
JavaScript(JS) 压缩 / 混淆 / 格式化 批处理工具
2010/12/10 Javascript
对js关键字命名的疑问介绍
2014/04/25 Javascript
谈谈Jquery ajax中success和complete有哪些不同点
2015/11/20 Javascript
jQuery.form插件的使用及跨域异步上传文件
2016/04/27 Javascript
jQuery ajax调用后台aspx后台文件的两种常见方法(不是ashx)
2016/06/28 Javascript
详解利用exif.js解决ios手机上传竖拍照片旋转90度问题
2016/11/04 Javascript
BootStrap实现轮播图效果(收藏)
2016/12/30 Javascript
详解angular ui-grid之过滤器设置
2017/06/07 Javascript
详解Vue路由History mode模式中页面无法渲染的原因及解决
2017/09/28 Javascript
如何从零开始利用js手写一个Promise库详解
2018/04/19 Javascript
vue.js使用watch监听路由变化的方法
2018/07/08 Javascript
[01:02:05]LGD vs Mineski 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
Python不规范的日期字符串处理类
2014/06/10 Python
Python的Bottle框架的一些使用技巧介绍
2015/04/08 Python
利用nohup来开启python文件的方法
2019/01/14 Python
python实现计算器功能
2019/10/31 Python
使用Python完成15位18位身份证的互转功能
2019/11/06 Python
Python递归求出列表(包括列表中的子列表)的最大值实例
2020/02/27 Python
Python发送邮件封装实现过程详解
2020/05/09 Python
html5标记文字_动力节点Java学院整理
2017/07/11 HTML / CSS
检测浏览器对HTML5和CSS3支持度的方法
2015/06/25 HTML / CSS
米兰网婚纱礼服法国网上商店:Milanoo法国
2016/08/20 全球购物
白银帝国观后感
2015/06/17 职场文书
python 制作一个gui界面的翻译工具
2021/05/14 Python
Python中的 No Module named ***问题及解决
2022/07/23 Python
苹果macOS 13开发者预览版Beta 8发布 正式版10月发布
2022/09/23 数码科技