千家信息网

Python tail 实现S3 动态上传

发表于:2024-11-11 作者:千家信息网编辑
千家信息网最后更新 2024年11月11日,本文源码转至:https://github.com/kasun/python-tail 感谢作者, 稍加修改,实现了文件动态上传的功能一: 主体执行部分[root@linux219 base]# ca
千家信息网最后更新 2024年11月11日Python tail 实现S3 动态上传

本文源码转至:https://github.com/kasun/python-tail 感谢作者, 稍加修改,实现了文件动态上传的功能

一: 主体执行部分[root@linux219 base]# cat vsftp.py#!/usr/bin/env python#-*-coding:UTF-8-*-"""@Item   :  cheetah v1.0@Author :  william@Group  :  System YunWei@Date   :  2015-01-28@E-mail :  swq.499809608@163.com@Funtion:    """import json,sys,time,osimport timeimport hmacimport hashlibimport requestsimport reimport tailDfile = "/data/base/vsftp"Vfile = "/var/log/vsftpd.log"Nfile = "/data/base/vsftp/n.log"def s3Vsftp():    os.system("cp -fr %s %s "%(Vfile,Nfile))    os.system("echo ''>%s "%Vfile)    fp = open(Nfile,'r').readlines()    for x in fp:        if  re.search("CHMOD",x) or re.search("UPLOAD",x):            x =  x.strip()            x =  x.split('"')[3]            nx = x.split()[0]                        if os.path.isfile("/data/cifs"+nx):                os.system("s3cmd --acl-public put /data/cifs%s s3://swq499809608.aws.com%s" %(nx,nx))            elif re.search('zip',nx):                try:                    os.system("s3cmd --acl-public put %s s3://swq499809608.aws.com%s" %(nx,nx.split('imguser')[1]))                except:                    pass    os.system("mv  %s %s/%s.file"%(Nfile,Dfile,time.strftime("%F-%H-%M")))def  work():    while True:        t = tail.Tail(Vfile)        print t.follow()if __name__ == "__main__":    sc = work()        二: tail. 实现部分源码转至: https://github.com/kasun/python-tail[root@linux219 base]# cat tail.py#!/usr/bin/env python'''Python-Tail - Unix tail follow implementation in Python.python-tail can be used to monitor changes to a file.Example:    import tail    # Create a tail instance    t = tail.Tail('file-to-be-followed')    # Register a callback function to be called when a new line is found in the followed file.    # If no callback function is registerd, new lines would be printed to standard out.    t.register_callback(callback_function)    # Follow the file with 5 seconds as sleep time between iterations.    # If sleep time is not provided 1 second is used as the default time.    t.follow(s=5) '''# Author - Kasun Herath # Source - https://github.com/kasun/python-tailimport osimport sysimport timeimport reclass Tail(object):    ''' Represents a tail command. '''    def __init__(self, tailed_file):        ''' Initiate a Tail instance.            Check for file validity, assigns callback function to standard out.                        Arguments:                tailed_file - File to be followed. '''        self.check_file_validity(tailed_file)        self.tailed_file = tailed_file        self.callback = sys.stdout.write    def follow(self, s=1):        ''' Do a tail follow. If a callback function is registered it is called with every new line.        Else printed to standard out.            Arguments:            s - Number of seconds to wait between each iteration; Defaults to 1. '''        with open(self.tailed_file) as file_:            # Go to the end of file            file_.seek(0,2)            while True:                curr_position = file_.tell()                line = file_.readline()                if not line:                    file_.seek(curr_position)                    time.sleep(s)                else:                    #self.callback(line)                    if  re.search("CHMOD",line) or re.search("UPLOAD",line):                        #修改主体部分                        x =  line.strip()                        x =  x.split('"')[3]                        nx = x.split()[0]                        # commad s3cmd put file                                      if os.path.isfile("/data/cifs"+nx):                            print "/data/cifs"+nx                            os.system("s3cmd --acl-public put /data/cifs%s s3://swq499809608.aws.com%s" %(nx,nx))                            print ("s3cmd --acl-public put /data/cifs%s s3://swq499809608.aws.com%s" %(nx,nx))                        elif re.search('zip',nx):                            try:                                os.system("s3cmd --acl-public put %s s3://swq499809608.aws.com%s" %(nx,nx.split('imguser')[1]))                            except:                                pass                        else:                            print 'no'                        #主体结束部分    def register_callback(self, func):        ''' Overrides default callback function to provided function. '''        self.callback = func    def check_file_validity(self, file_):        ''' Check whether the a given file exists, readable and is a file '''        if not os.access(file_, os.F_OK):            raise TailError("File '%s' does not exist" % (file_))        if not os.access(file_, os.R_OK):            raise TailError("File '%s' not readable" % (file_))        if os.path.isdir(file_):            raise TailError("File '%s' is a directory" % (file_))class TailError(Exception):    def __init__(self, msg):        self.message = msg    def __str__(self):        return 'yes',self.message.split('')
0