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) 创建远程目录