#!/usr/bin/env python.exe #coding=gbk from ftplib import FTP from os.path import basename, dirname, exists from os import stat, rename, remove from time import localtime, strftime from sys import argv TIMEFORMAT = '%Y%m%d%H%M%S' TIMESTRING = strftime( TIMEFORMAT, localtime() ) #字符串格式:传输类型|传输模式|主机用户|主机密码|主机IP|本地文件|替换的远程文件 #传输类型: U上传 D下载 #传输模式: I二进制模式 A ascii模式 #~ ftpString0 = 'U|A|ocs|ocs321|172.31.1.142|/cygdrive/z/OcsFileRateEngine.cpp|/ztesoft/ocs/zdl/OcsFileRateEngine.cpp' #~ ftpString1 = 'U|I|ocs|ocs321|172.31.1.142|/cygdrive/z/OcsFileRateEngine.cpp|/ztesoft/ocs/zdl/OcsFileRateEngine.cpp' #~ ftpString2 = 'D|A|ocs|ocs321|172.31.1.142|/cygdrive/z/conn.pl|/ztesoft/ocs/zdl/conn.pl' #~ ftpString3 = 'D|I|ocs|ocs321|172.31.1.142|/cygdrive/z/conn.pl|/ztesoft/ocs/zdl/conn.pl' def UpdateFile(filestr): '' list = filestr.split('|') transferType = list[0] transferMod = list[1] r_user = list[2] r_passwd = list[3] r_ip = list[4] localFile = list[5] roamFile = list[6] l_fileName = basename(localFile) l_filePath = dirname(localFile) r_fileName = basename(roamFile) r_filePath = dirname(roamFile) isBackFile = 0 print '###########################################################' print '开始连接主机:',r_ip print '登录用户: ',r_user if (transferType=='U'): print '上传文件: \n\t\t',localFile print '上传文件大小:',stat(localFile).st_size,'byte' if (transferType=='D'): myFtp.sendcmd('TYPE I') print '下载文件: \n\t\t',roamFile print '下载文件大小:',myFtp.size(roamFile),'byte' myFtp = FTP(r_ip) myFtp.login(r_user, r_passwd) print '当前远程路径:',myFtp.pwd() myFtp.cwd(r_filePath) print '变更路径到: ',myFtp.pwd() myFtp.set_debuglevel(0) if (transferType == 'U'):#上传流程 #判断目录下文件是否存在 #上传流程判断远程目录下相应文件是否存在 #~ print '上传流程判断远程目录下相应文件是否存在' fileNameList = [] fileNameList = myFtp.nlst() for file in fileNameList: if (file == r_fileName): bakFileName = roamFile + TIMESTRING print '远程FTP服务器存在重名文件,将其改名为:\n\t',bakFileName myFtp.rename(roamFile, bakFileName) isBackFile=1 if (transferMod == 'I'):#二进制模式 print 'localfile:',localFile fileHeadle = open(localFile, 'rb') myFtp.storbinary('STOR ' + r_fileName, fileHeadle) fileHeadle.close() elif (transferMod == 'A'):#ascii模式 fileHeadle = open(localFile, 'r') myFtp.storlines('STOR ' + r_fileName, fileHeadle) fileHeadle.close() else: print '未知的模式类型:',transferMod elif (transferType == 'D'):#下载流程 #判断目录下文件是否存在 #下载流程判断本地目录下文件是否已经存在 #~ print '下载流程判断本地目录下文件是否已经存在' if exists(localFile): bakFileName = localFile + TIMESTRING print '本地存在重复文件,将其改名为:',bakFileName rename(localFile, bakFileName) isBackFile=1 #开始下载 if (transferMod == 'I'):#二进制模式 fileHeadle = open(localFile, 'wb') myFtp.retrbinary('RETR ' + r_fileName, fileHeadle.write) fileHeadle.close() elif (transferMod == 'A'):#ascii模式 fileHeadle = open(localFile, 'w') myFtp.retrlines('RETR ' + r_fileName, lambda s, w=fileHeadle.write: w(s+"\n")) fileHeadle.close() else: print '未知的模式类型:',transferMod else: print '未知的传输类型:',transferType myFtp.set_debuglevel(0) myFtp.sendcmd('TYPE I') if (transferType=='U'): print '上传文件:\n\t\t%s [%d] byte ' % (roamFile, myFtp.size(roamFile)) if (transferType=='D'): print '下载文件:\n\t\t%s [%d] byte ' % (localFile, stat(localFile).st_size) isOK = (stat(localFile).st_size == myFtp.size(roamFile)) if (isOK == False): print '本地文件大小:[%d] byte' % stat(localFile).st_size print '远程文件大小:[%d] byte' % myFtp.size(roamFile) if ( isOK == False and transferType=='U'): print '!=============文件上传大小不一致,进行回退=================!' #删除远程服务器刚上传的文件 myFtp.delete(roamFile) #回退备份文件 if (isBackFile == 1): myFtp.rename(bakFileName, roamFile) if ( isOK == False and transferType=='D'): print '!=============文件下载大小不一致,进行回退=================!' #删除刚下载文件 remove(localFile) #回退备份文件 if (isBackFile == 1): rename(bakFileName, localFile) if ( isOK == False ): print '!======================回退完成===========================!' print '###########################################################' myFtp.quit() #从文件中读取更新文件字符串 updateFileListName = argv[1] UpdateFD = open(updateFileListName, 'r') for str in UpdateFD: if (str[0] != '#'): UpdateFile(str) UpdateFD.close()
^_^
2009年8月26日星期三
Python FTP 例子
本站文章除注明外,均为本站原创
转载请注明文章转载自: 大笨熊乐园 [ https://blog.foolbear.com/?m=0 ]
文章标题: Python FTP 例子
文章地址: https://blog.foolbear.com/2009/08/python-ftp_26.html?m=0
转载请注明文章转载自: 大笨熊乐园 [ https://blog.foolbear.com/?m=0 ]
文章标题: Python FTP 例子
文章地址: https://blog.foolbear.com/2009/08/python-ftp_26.html?m=0
订阅:
博文评论
(
Atom
)
没有评论 :
发表评论