python 基于windows环境的ftp功能
描述:
1、基于备份服务器部署的py程序,将需要备份主机目录下的内容下载至备份服务器(服务端和远端都是windows server 2008)
2、py程序部署在windows服务器,后台运行,基于bat脚本启停程序
Windows server 2008 FTP环境配置
1、安装FTP服务
开始 --》管理工具 --》服务器管理器

2、安装IIS/FTP角色
打开服务器管理器,找到添加角色,然后点击,弹出添加角色对话框,选择下一步

下一步
选择Web服务器(IIS),然后选择FTP服务,直到安装完成。
参考:http://www.cnblogs.com/Denny_Yang/p/3741041.html
FTP代码
class Windows_ftp(object):
'''
FTP类,基于ftplib模块实现
connect: 连接
login: 登陆
DownLoadFile: 下载文件
DownLoadFileTree: 下载指定目录下的所有文件和目录
UpLoadFile: 上传文件
UpLoadFileTree: 上传指定目录下的所有文件和目录
isDir: 判断是否为目录
cwd: 变更目录
quit: 退出
'''
ftp = ftplib.FTP()
bIsDir = False
path = "" def __init__(self, host, port, username, password):
self.host = host
self.port = port
self.username = username
self.password = password
self.buffer = 4096 # 设置的缓冲区大小
self.ftp.set_debuglevel(0) # 打开调试级别2,显示详细信息; 级别0关闭调试模式 def connect(self):
try:
self.ftp.connect(self.host, self.port, timeout=10)
logger.info('*** connected to host "%s"' % self.host)
return True
except Exception as err:
logger.error('cannot reach "%s", %s' % (self.host, err))
return False def login(self):
try:
self.ftp.login(self.username, self.password)
logger.info('*** Login successfully "%s"' % self.username)
return True
except Exception as err:
logger.error('cannot login, %s' % err)
self.quit()
return False def DownLoadFile(self, LocalFile, RemoteFile):
file_handler = open(LocalFile, 'wb')
self.ftp.retrbinary("RETR %s" % RemoteFile, file_handler.write, self.buffer)
file_handler.close()
return True def show(self, list):
result = list.split(" ")
#logger.debug(result)
if self.path in result and "<DIR>" in result:
self.bIsDir = True def isDir(self, path):
self.bIsDir = False
self.path = path
#this ues callback function ,that will change bIsDir value
self.ftp.retrlines('LIST', self.show)
return self.bIsDir def DownLoadFileTree(self, LocalDir, RemoteDir):
if os.path.isdir(LocalDir) == False: # 判断本地主机是否存在目录,进行创建
os.makedirs(LocalDir)
try:
self.cwd(RemoteDir)
except Exception as err:
logger.error("Failed to open the path to the remote host, %s" % err)
return False
RemoteNames = self.ftp.nlst() # 列出远程下载目录下所有内容
logger.debug("Remote downLoad path:%s, DownLoad files list:%s" % (RemoteDir, RemoteNames))
for file_or_path in RemoteNames:
Local = os.path.join(LocalDir, file_or_path)
if self.isDir(file_or_path):
self.DownLoadFileTree(Local, file_or_path)
else:
self.DownLoadFile(Local, file_or_path)
self.ftp.cwd("..")
return def cwd(self, DIRN):
try:
self.ftp.cwd(DIRN)
except Exception as err:
logger.error('ERROR:cannot CD to "%s"' % DIRN)
logger.error(err)
self.quit()
logger.debug('*** changed to "%s" folder' % DIRN) def UpLoadFile(self, LocalFile, RemoteFile):
if os.path.isfile(LocalFile) == False:
return False
file_handler = open(LocalFile, "rb")
self.ftp.storbinary('STOR %s' % RemoteFile, file_handler, self.buffer)
file_handler.close()
return True def UpLoadFileTree(self, LocalDir, RemoteDir):
if os.path.isdir(LocalDir) == False:
return False
LocalNames = os.listdir(LocalDir)
logger.debug("Remote upLoad path:%s, UpLoad files list:%s" % (RemoteDir, LocalDir))
self.cwd(RemoteDir)
for Local in LocalNames:
src = os.path.join(LocalDir, Local)
if os.path.isdir(src):
self.UpLoadFileTree(src, Local)
else:
self.UpLoadFile(src, Local)
self.ftp.cwd("..")
return def quit(self):
self.ftp.quit()
参考:http://www.sharejs.com/codes/python/5619
windows脚本
start.bat
@echo off
if exist ./var/hk_win_syncfile.pid (echo "[%date% %time%] Running.."
ping -n 3 localhost >nul
exit
)else ( echo "[%date% %time%] Starting.."
start pythonw hk_win_syncfile.py
ping -n 3 localhost >nul
status.bat
ping -n 3 localhost >nul
)
stop.bat
@echo off if exist ./var/hk_win_syncfile.pid (echo "[%date% %time%] Stopping..."
python -c "import os; os.system('taskkill /F /PID %%s' %% open('./var/hk_win_syncfile.pid').read());"
del /s hk_win_syncfile.pid
ping -n 3 localhost >nul
)else (echo "[%date% %time%] Stopped.."
ping -n 3 localhost >nul
)
status.bat
@echo off
if exist ./var/hk_win_syncfile.pid (echo "[%date% %time%] Runningg...")else (echo "[%date% %time%] Stopped..")
ping -n 3 localhost >nul
restart.bat
@echo off
if exist ./var/hk_win_syncfile.pid (echo "[%date% %time%] Stopping..."
python -c "import os; os.system('taskkill /F /PID %%s' %% open('./var/hk_win_syncfile.pid').read());"
del /s hk_win_syncfile.pid
ping -n 3 localhost >nul
)else (echo "[%date% %time%] Stopped.."
ping -n 3 localhost >nul
) if exist ./var/hk_win_syncfile.pid (echo "[%date% %time%] Running.."
ping -n 3 localhost >nul
exit
)else ( echo "[%date% %time%] Starting.."
start pythonw hk_win_syncfile.py
ping -n 3 localhost >nul
status.bat
ping -n 3 localhost >nul
)
参考:http://my.oschina.net/sanpeterguo/blog/337263
python 基于windows环境的ftp功能的更多相关文章
- 基于Windows环境下cmd/编译器无法输入中文,显示中文乱码解决方案
基于Windows环境下cmd/编译器无法输入中文,显示中文乱码解决方案 两个月前做C++课设的时候,电脑编译器编译结果出现了中文乱码,寻求了百度和大神们,都没有解决这个问题,百度上一堆解释是对编译器 ...
- 基于windows环境VsCode的ESP32开发环境搭建
1. 基于windows环境VsCode的ESP32开发环境搭建,网上有各类教程,但是我实测却不行. 例如我在vscode内安装的乐鑫插件,扩展配置项是下图这样: 而百度的各类博文却都是这样: 经过网 ...
- 【Kafka】基于Windows环境的Kafka有关环境(scala+zookeeper+kafka+可视化工具)搭建、以及使用.NET环境开发的案例代码与演示
前言:基于Windows系统下的Kafka环境搭建:以及使用.NET 6环境进行开发简单的生产者与消费者的演示. 一.环境部署 Kafka是使用Java语言和Scala语言开发的,所以需要有对应的Ja ...
- python添加Windows环境变量
1.cmd中添加方式 SET PATH=%PATH%;c:\Program Files (x86)\Wireshark 注:如上代码添加c:\Program Files (x86)\Wireshark ...
- python在windows环境安装MySQLdb
一.环境 系统:win7,64位 python版本:2.7.15 pip版本:10.0.1 二.安装 1. 用pip安装 pip install MySQLdb 报错: Could not find ...
- 基于windows环境的Flask网站搭建(mysql + conda + redis)
1下载mysql-installer-community-5.7.24.0.msi (https://dev.mysql.com/downloads/windows/installer/8.0.htm ...
- python网络编程--socketserver 和 ftp功能简单说明
1. socketserver 我们之前写的tcp协议的socket是不是一次只能和一个客户端通信,如果用socketserver可以实现和多个客户端通信.它是在socket的基础上进行了一层封装,也 ...
- 基于Windows环境下Myeclipse10.0下载安装破解及jdk的下载安装及环境变量的配置
jdk的安装及环境变量的配置 1.安装JDK开发环境 附上jdk安装包的百度云链接 链接:http://pan.baidu.com/s/1mh6QTs8 密码:jkb6(当然自行去官网下载最好哒,可以 ...
- 让你用sublime写出最完美的python代码--windows环境
至少很长一段时间内,我个人用的一直是pycharm,也感觉挺好用的,也没啥大毛病 但是pycharm确实有点笨重,啥功能都有,但是有很多可能这辈子我也不会用到,并且pycharm打开的速度确实不敢恭维 ...
随机推荐
- 无法将分支 master 发布到远程 origin,因为远程存储库中已存在具有同一名称的分支
无法将分支 master 发布到远程 origin,因为远程存储库中已存在具有同一名称的分支.发布此分支将导致远程存储库中的分支发生非快进更新. 第一次用oschina的git设置完远程仓库后提交出现 ...
- JavaScript的理解记录(3)
---接上篇 一.函数: 1. 函数定义后直接执行:var f = (function(x){ return x*10}(10)); 2. 函数的调用有四种方式: 作为函数:作为方法:作为构造函 ...
- 为什么我们要给父级元素写overflow:hidden
有这样的一种情况,有的时候,我们的父级元素设置了高度,一般来说,父级元素的高度是根据子元素的高度来自适应撑开的,如果我们的父级元素也设置了高度,那么其高度就不会随着子元素的的大小而自适应,也许有的时候 ...
- java String.split()函数的用法分析
java String.split()函数的用法分析 栏目:Java基础 作者:admin 日期:2015-04-06 评论:0 点击: 3,195 次 在java.lang包中有String.spl ...
- [转]十步完全理解SQL
原文地址:http://blog.jobbole.com/55086/ 很多程序员视 SQL 为洪水猛兽.SQL 是一种为数不多的声明性语言,它的运行方式完全不同于我们所熟知的命令行语言.面向对象的程 ...
- 【Tyvj 1060】【NOIP 2005】等价表达式
设a为一个质数,模数为另一个质数,然后暴力算多项式的答案,如果答案相等就认为两个多项式相等. 这种hash有出错概率的题为什么还是要用hash呢?因为出错的概率实在太小了,a和模数的值取得好出题人根本 ...
- 【线性规划与网络流 24题】已完成(3道题因为某些奇怪的原因被抛弃了QAQ)
写在前面:SDOI2016 Round1滚粗后蒟蒻开始做网络流来自我拯救(2016-04-11再过几天就要考先修课,现在做网络流24题貌似没什么用←退役节奏) 做的题目将附上日期,见证我龟速刷题. 1 ...
- mysql5.5的安装与配置(亲测版)
mysql5.5.x的编译安装 说明:5.5和5.1差不多,只是在编译时增加了一个cmake,其他基本一样,mysql5.5默认编码是utf-8,在使用mysql5.5配置lnmp或者lamp后安装d ...
- php实现木桶排序
今天重新看了看木桶排序,思路比较简单,这里整理一下,免得下次忘记. 假设要对一组数据 2 2 3 1 6 5 4 进行桶排序. 1.首先选出最小元素1和最大元素6,做一个桶,也就是定义一个1-6的数组 ...
- 纯CSS下拉导航菜单
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "<a href="h ...