1:
#!/usr/local/bin/python # encoding: utf-8 import os import datetime import sys import shutil import socket from ftplib import FTP import logging import logging.config def check_run_pid(app): res = os.popen("ps aux | grep -v grep| grep \'%s\'" %(app)) if len(res.readlines()) > 2: print "App has already run, exit at %s" %(datetime.datetime.today()) sys.exit() else: print "Begin to start %s in %s" %(app, datetime.datetime.today()) if __name__ == '__main__': check_run_pid("ftpclient.py") SOURCE_DIR = '/proclog/transfers/FCBill_1' #源目录 #SOURCE_DIR = 'd:/' REMOTE_DIR = '/proclog/2nd_edition/flexicache/upload' #目标目录 host = '' #目标主机地址 username = '' password = '' logging.config.fileConfig("ftp_logging.conf") logger = logging.getLogger("ftp") source_files = [fname for fname in os.listdir(SOURCE_DIR) if fname.endswith('.gz')] logger.info('%s files to process' % len(source_files)) socket.setdefaulttimeout(15) ftp = FTP(host) ftp.set_pasv(False) ftp.login(username, password) ftp.cwd(REMOTE_DIR) for fname in source_files: f = open(os.path.join(SOURCE_DIR, fname), 'rb') ftp.storbinary("STOR " + fname + '.temp', f) ftp.rename(fname + '.temp', fname) f.close() os.remove( os.path.join(SOURCE_DIR, fname)) logger.info('%s transfer to main ftp finish.' % (os.path.join(SOURCE_DIR, fname))) ftp.quit()
2:日志config
[loggers] keys=root,main [handlers] keys=consoleHandler,fileHandler [formatters] keys=fmt [logger_root] level=DEBUG handlers=consoleHandler [logger_main] level=DEBUG qualname=main handlers=fileHandler [handler_consoleHandler] class=StreamHandler level=DEBUG formatter=fmt args=(sys.stdout,) [handler_fileHandler] class=logging.handlers.RotatingFileHandler level=DEBUG formatter=fmt args=('tst.log','a',20000,5,) [formatter_fmt] format=%(asctime)s - %(name)s - %(levelname)s - %(message)s datefmt=
3:一些用法
from ftplib import FTP import socket def upload(): print '超时时间设置为10秒' socket.setdefaulttimeout(10) print '开启ftp' ftp = FTP('ftp.website.com') print '登录ftp' ftp.login('username', 'password') print '执行ftp操作' ftp.dir() print '退出ftp' ftp.quit() if __name__== '__main__': upload()
ftp的具体方法:
login(user='anonymous',passwd='', acct='') 登录到FTP服务器,所有的参数都是可选的
pwd() 得到当前工作目录
cwd(path) 把当前工作目录设置为path
dir([path[,...[,cb]]) 显示path目录里的内容,可选的参数cb 是一个回调函数,它会被传给retrlines()方法
nlst([path[,...]) 与dir()类似,但返回一个文件名的列表,而不是显示这些文件名
retrlines(cmd [, cb]) 给定FTP 命令(如“RETR filename”),用于下载文本文件。可选的回调函数cb 用于处理文件的每一行
retrbinary(cmd, cb[,bs=8192[, ra]]) 与retrlines()类似,只是这个指令处理二进制文件。回调函数cb 用于处理每一块(块大小默认为8K)下载的数据。
storlines(cmd, f) 给定FTP 命令(如“STOR filename”),以上传文本文件。要给定一个文件对象f
storbinary(cmd, f[,bs=8192]) 与storlines()类似,只是这个指令处理二进制文件。要给定一个文件对象f,上传块大小bs 默认为8Kbs=8192])
rename(old, new) 把远程文件old 改名为new
delete(path) 删除位于path 的远程文件
mkd(directory) 创建远程目录
login(user='anonymous',passwd='', acct='') 登录到FTP服务器,所有的参数都是可选的
pwd() 得到当前工作目录
cwd(path) 把当前工作目录设置为path
dir([path[,...[,cb]]) 显示path目录里的内容,可选的参数cb 是一个回调函数,它会被传给retrlines()方法
nlst([path[,...]) 与dir()类似,但返回一个文件名的列表,而不是显示这些文件名
retrlines(cmd [, cb]) 给定FTP 命令(如“RETR filename”),用于下载文本文件。可选的回调函数cb 用于处理文件的每一行
retrbinary(cmd, cb[,bs=8192[, ra]]) 与retrlines()类似,只是这个指令处理二进制文件。回调函数cb 用于处理每一块(块大小默认为8K)下载的数据。
storlines(cmd, f) 给定FTP 命令(如“STOR filename”),以上传文本文件。要给定一个文件对象f
storbinary(cmd, f[,bs=8192]) 与storlines()类似,只是这个指令处理二进制文件。要给定一个文件对象f,上传块大小bs 默认为8Kbs=8192])
rename(old, new) 把远程文件old 改名为new
delete(path) 删除位于path 的远程文件
mkd(directory) 创建远程目录