描述:

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代码

  1. class Windows_ftp(object):
  2. '''
  3. FTP类,基于ftplib模块实现
  4. connect: 连接
  5. login: 登陆
  6. DownLoadFile: 下载文件
  7. DownLoadFileTree: 下载指定目录下的所有文件和目录
  8. UpLoadFile: 上传文件
  9. UpLoadFileTree: 上传指定目录下的所有文件和目录
  10. isDir: 判断是否为目录
  11. cwd: 变更目录
  12. quit: 退出
  13. '''
  14. ftp = ftplib.FTP()
  15. bIsDir = False
  16. path = ""
  17.  
  18. def __init__(self, host, port, username, password):
  19. self.host = host
  20. self.port = port
  21. self.username = username
  22. self.password = password
  23. self.buffer = 4096 # 设置的缓冲区大小
  24. self.ftp.set_debuglevel(0) # 打开调试级别2,显示详细信息; 级别0关闭调试模式
  25.  
  26. def connect(self):
  27. try:
  28. self.ftp.connect(self.host, self.port, timeout=10)
  29. logger.info('*** connected to host "%s"' % self.host)
  30. return True
  31. except Exception as err:
  32. logger.error('cannot reach "%s", %s' % (self.host, err))
  33. return False
  34.  
  35. def login(self):
  36. try:
  37. self.ftp.login(self.username, self.password)
  38. logger.info('*** Login successfully "%s"' % self.username)
  39. return True
  40. except Exception as err:
  41. logger.error('cannot login, %s' % err)
  42. self.quit()
  43. return False
  44.  
  45. def DownLoadFile(self, LocalFile, RemoteFile):
  46. file_handler = open(LocalFile, 'wb')
  47. self.ftp.retrbinary("RETR %s" % RemoteFile, file_handler.write, self.buffer)
  48. file_handler.close()
  49. return True
  50.  
  51. def show(self, list):
  52. result = list.split(" ")
  53. #logger.debug(result)
  54. if self.path in result and "<DIR>" in result:
  55. self.bIsDir = True
  56.  
  57. def isDir(self, path):
  58. self.bIsDir = False
  59. self.path = path
  60. #this ues callback function ,that will change bIsDir value
  61. self.ftp.retrlines('LIST', self.show)
  62. return self.bIsDir
  63.  
  64. def DownLoadFileTree(self, LocalDir, RemoteDir):
  65. if os.path.isdir(LocalDir) == False: # 判断本地主机是否存在目录,进行创建
  66. os.makedirs(LocalDir)
  67. try:
  68. self.cwd(RemoteDir)
  69. except Exception as err:
  70. logger.error("Failed to open the path to the remote host, %s" % err)
  71. return False
  72. RemoteNames = self.ftp.nlst() # 列出远程下载目录下所有内容
  73. logger.debug("Remote downLoad path:%s, DownLoad files list:%s" % (RemoteDir, RemoteNames))
  74. for file_or_path in RemoteNames:
  75. Local = os.path.join(LocalDir, file_or_path)
  76. if self.isDir(file_or_path):
  77. self.DownLoadFileTree(Local, file_or_path)
  78. else:
  79. self.DownLoadFile(Local, file_or_path)
  80. self.ftp.cwd("..")
  81. return
  82.  
  83. def cwd(self, DIRN):
  84. try:
  85. self.ftp.cwd(DIRN)
  86. except Exception as err:
  87. logger.error('ERROR:cannot CD to "%s"' % DIRN)
  88. logger.error(err)
  89. self.quit()
  90. logger.debug('*** changed to "%s" folder' % DIRN)
  91.  
  92. def UpLoadFile(self, LocalFile, RemoteFile):
  93. if os.path.isfile(LocalFile) == False:
  94. return False
  95. file_handler = open(LocalFile, "rb")
  96. self.ftp.storbinary('STOR %s' % RemoteFile, file_handler, self.buffer)
  97. file_handler.close()
  98. return True
  99.  
  100. def UpLoadFileTree(self, LocalDir, RemoteDir):
  101. if os.path.isdir(LocalDir) == False:
  102. return False
  103. LocalNames = os.listdir(LocalDir)
  104. logger.debug("Remote upLoad path:%s, UpLoad files list:%s" % (RemoteDir, LocalDir))
  105. self.cwd(RemoteDir)
  106. for Local in LocalNames:
  107. src = os.path.join(LocalDir, Local)
  108. if os.path.isdir(src):
  109. self.UpLoadFileTree(src, Local)
  110. else:
  111. self.UpLoadFile(src, Local)
  112. self.ftp.cwd("..")
  113. return
  114.  
  115. def quit(self):
  116. self.ftp.quit()

参考:http://www.sharejs.com/codes/python/5619

windows脚本

start.bat

  1. @echo off
  2. if exist ./var/hk_win_syncfile.pid (echo "[%date% %time%] Running.."
  3. ping -n 3 localhost >nul
  4. exit
  5. )else ( echo "[%date% %time%] Starting.."
  6. start pythonw hk_win_syncfile.py
  7. ping -n 3 localhost >nul
  8. status.bat
  9. ping -n 3 localhost >nul
  10. )

stop.bat

  1. @echo off
  2.  
  3. if exist ./var/hk_win_syncfile.pid (echo "[%date% %time%] Stopping..."
  4. python -c "import os; os.system('taskkill /F /PID %%s' %% open('./var/hk_win_syncfile.pid').read());"
  5. del /s hk_win_syncfile.pid
  6. ping -n 3 localhost >nul
  7. )else (echo "[%date% %time%] Stopped.."
  8. ping -n 3 localhost >nul
  9. )

status.bat

  1. @echo off
  2. if exist ./var/hk_win_syncfile.pid (echo "[%date% %time%] Runningg...")else (echo "[%date% %time%] Stopped..")
  3. ping -n 3 localhost >nul

restart.bat

  1. @echo off
  2. if exist ./var/hk_win_syncfile.pid (echo "[%date% %time%] Stopping..."
  3. python -c "import os; os.system('taskkill /F /PID %%s' %% open('./var/hk_win_syncfile.pid').read());"
  4. del /s hk_win_syncfile.pid
  5. ping -n 3 localhost >nul
  6. )else (echo "[%date% %time%] Stopped.."
  7. ping -n 3 localhost >nul
  8. )
  9.  
  10. if exist ./var/hk_win_syncfile.pid (echo "[%date% %time%] Running.."
  11. ping -n 3 localhost >nul
  12. exit
  13. )else ( echo "[%date% %time%] Starting.."
  14. start pythonw hk_win_syncfile.py
  15. ping -n 3 localhost >nul
  16. status.bat
  17. ping -n 3 localhost >nul
  18. )

参考:http://my.oschina.net/sanpeterguo/blog/337263

python 基于windows环境的ftp功能的更多相关文章

  1. 基于Windows环境下cmd/编译器无法输入中文,显示中文乱码解决方案

    基于Windows环境下cmd/编译器无法输入中文,显示中文乱码解决方案 两个月前做C++课设的时候,电脑编译器编译结果出现了中文乱码,寻求了百度和大神们,都没有解决这个问题,百度上一堆解释是对编译器 ...

  2. 基于windows环境VsCode的ESP32开发环境搭建

    1. 基于windows环境VsCode的ESP32开发环境搭建,网上有各类教程,但是我实测却不行. 例如我在vscode内安装的乐鑫插件,扩展配置项是下图这样: 而百度的各类博文却都是这样: 经过网 ...

  3. 【Kafka】基于Windows环境的Kafka有关环境(scala+zookeeper+kafka+可视化工具)搭建、以及使用.NET环境开发的案例代码与演示

    前言:基于Windows系统下的Kafka环境搭建:以及使用.NET 6环境进行开发简单的生产者与消费者的演示. 一.环境部署 Kafka是使用Java语言和Scala语言开发的,所以需要有对应的Ja ...

  4. python添加Windows环境变量

    1.cmd中添加方式 SET PATH=%PATH%;c:\Program Files (x86)\Wireshark 注:如上代码添加c:\Program Files (x86)\Wireshark ...

  5. python在windows环境安装MySQLdb

    一.环境 系统:win7,64位 python版本:2.7.15 pip版本:10.0.1 二.安装 1. 用pip安装 pip install MySQLdb 报错: Could not find ...

  6. 基于windows环境的Flask网站搭建(mysql + conda + redis)

    1下载mysql-installer-community-5.7.24.0.msi (https://dev.mysql.com/downloads/windows/installer/8.0.htm ...

  7. python网络编程--socketserver 和 ftp功能简单说明

    1. socketserver 我们之前写的tcp协议的socket是不是一次只能和一个客户端通信,如果用socketserver可以实现和多个客户端通信.它是在socket的基础上进行了一层封装,也 ...

  8. 基于Windows环境下Myeclipse10.0下载安装破解及jdk的下载安装及环境变量的配置

    jdk的安装及环境变量的配置 1.安装JDK开发环境 附上jdk安装包的百度云链接 链接:http://pan.baidu.com/s/1mh6QTs8 密码:jkb6(当然自行去官网下载最好哒,可以 ...

  9. 让你用sublime写出最完美的python代码--windows环境

    至少很长一段时间内,我个人用的一直是pycharm,也感觉挺好用的,也没啥大毛病 但是pycharm确实有点笨重,啥功能都有,但是有很多可能这辈子我也不会用到,并且pycharm打开的速度确实不敢恭维 ...

随机推荐

  1. 基于FPGA的通信系统实验

    伪随机信号发生器 1.伪随机信号发生器原理 伪随机信号发生器又叫PN序列发生器或者是m序列发生器.m序列是一种线性反馈寄存器序列,m序列的产生可以利用r级寄存器产生长度为2^r-1的m序列,该实验中采 ...

  2. C# 反射范范的理解下

    程序进行时引入程序集.动态的调用方法属性事件. Assembly类. type类.

  3. hibernate的Criteria条件查询

    项目中用到了criteria的查询方式,觉得挺好用的,下班后找了一下资料,一边测试,一边在博客上面记录下来 1.初解 快速浏览了资料,大致了解了以下的内容: 1. Hibernate 定义了Crite ...

  4. jQuery基础--样式篇(3)

    1.jQuiery对象与DOM对象 对于刚刚接触jQuery的初学者,我们要清楚认识一点:jQuery对象与DOM对象是不一样的.可能一时半会分不清楚哪些是jQuery对象,哪些是DOM对象,下面重点 ...

  5. [转]领域驱动设计系列文章(2)——浅析VO、DTO、DO、PO的概念、区别和用处

    原文地址:http://www.blogjava.net/johnnylzb/archive/2010/05/27/321968.html 上一篇文章作为一个引子,说明了领域驱动设计的优势,从本篇文章 ...

  6. Yii2的View中JS代码添加

    直接写 <script> $(function(){ alert("aaa"); }); <script> 会提示出错 是因为view中添加js代码的前面没 ...

  7. xml解析工具-jdom

    前言:近期接触SSH框架的时候,经常得配置一下xml文件:今天闲来没事就挖挖xml解析的原理供大伙儿分享.本文主要通过一个简单的例子解析一个xml文件.明白其中缘由之后,大家想定义自己的xml也绝非难 ...

  8. High购电商系统开发注意点

    1.引入第三方框架AFnetworking时,记得在xcode项目添加安全属性(自认为). 2.异步加载数据时,如果用数组来装模型,记得对数组进行初始化.对控件的赋值一般在获取数据之后.如果用到Tab ...

  9. Spark Shell & Spark submit

    Spark 的 shell 是一个强大的交互式数据分析工具. 1. 搭建Spark 2. 两个目录下面有可执行文件: bin  包含spark-shell 和 spark-submit sbin 包含 ...

  10. 【BZOJ-1179】Atm Tarjan + SPFA

    1179: [Apio2009]Atm Time Limit: 15 Sec  Memory Limit: 162 MBSubmit: 2407  Solved: 993[Submit][Status ...