python定時去FTP下載文件

FTP上有系統的登錄日誌,日誌是三臺服務器傳上去的,日誌名稱一致並且名稱用日期命名,日誌放在不同的文件夾下面。該腳本每天早上8點半去FTP下載日誌。希望該文檔可以幫助你。

#!/usr/bin/env python
# _*_ coding:utf-8 _*_
import time
import datetime
from ftplib import FTP
import logging
import os
logger=logging.getLogger()
logger.setLevel(logging.DEBUG)
fh=logging.FileHandler('logs.txt',mode='a')
formatter = logging.Formatter('%(asctime)s[line:%(lineno)d]-%(levelname)s: %(message)s')
fh.setFormatter(formatter)
fh.setLevel(logging.DEBUG)
logger.addHandler(fh)
if not os.path.exists('download'):
      os.makedirs('download')
def ftp_connect():
    try:
        ftp_server = '127.0.0.1'  
        username = 'www'  # 用戶名
        password = 'password'  # 密碼
        ftp = FTP()
        ftp.connect(ftp_server, 21)
        ftp.login(username, password)
    except Exception as e:
        logger.error("FTP連接失敗 %s"%e)
    else:
        return ftp
def download_file(filename,localname):
    ftp = ftp_connect()
    if ftp:
        if not os.path.exists(localname):
            logger.info("開始下載%s"%(filename))
            try:
                ftp.nlst(filename)
            except Exception as e:
                logger.error("%s文件不存在"%filename)
            else:
                try:
                    bufsize = 1024
                    fp = open(localname, 'wb')
                    ftp.retrbinary('RETR ' + filename, fp.write, bufsize)
                    fp.close()
                    ftp.quit()
                    logger.info("下載%s成功"%filename)
                except Exception as f:
                    logger.error("下載%s失敗"%filename)
h=8
m=30
while True:
    yesterday=(datetime.datetime.now()-datetime.timedelta(days=1)).strftime("%Y-%m-%d")
    yesterday2=(datetime.datetime.now()-datetime.timedelta(days=1)).strftime("%Y%m%d")
    log='login.log_%s.log'%(yesterday)
    file=['/logs/101/%s'%log,'/logs/102/%s'%log,'/logs/103/%s'%log]
    for i in file:
        local="download/"+i.split('/')[-2]+"_"+i.split('/')[-1]
        download_file(i,local)
    while True:
        now = datetime.datetime.now()
        if now.hour == h and now.minute == m:
            break
        else:
            time.sleep(20)
            # logger.info("正常運行")
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章