#!/usr/bin/python import os import time import sys import re import smtplib from email.MIMEText import MIMEText from email.Utils import formatdate INTERVAL = 1.0 def readline(filepath): fp = open(filepath, "r") stat = os.stat(filepath) size = stat[6] fp.seek(size) try: while True: where = fp.tell() line = fp.readline() if not line: time.sleep(INTERVAL) fp.seek(where) else: yield line except KeyboardInterrupt, e: pass except Exception, e: print(e) finally: fp.close() def create_message(from_addr, to_addr, subject, body): msg = MIMEText(body) msg["subject"] = subject msg["From"] = from_addr msg["To"] = to_addr msg["Date"] = formatdate() return msg def send_mail(server, from_addr, to_addr, message): smtp = smtplib.SMTP(server) smtp.sendmail(from_addr, [to_addr], message.as_string()) smtp.close() def printUsage(): print(sys.argv[0] + " filepath regex_pattern smtp_server, sendto, subject") def run(): if len(sys.argv) != 6: printUsage() return filepath = sys.argv[1] pattern = re.compile(sys.argv[2]) smtp_server = sys.argv[3] from_addr = to_addr = sys.argv[4] subject = sys.argv[5] for line in readline(filepath): if pattern.findall(line): message = create_message(from_addr, to_addr, subject, line) send_mail(smtp_server, from_addr, to_addr, message) print line, if __name__ == "__main__": run()