`
这些年
  • 浏览: 389056 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

python ftp

 
阅读更多

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

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics