小豆浆 只是记录logging在项目中实战 www.xdoujiang.com

  • A+
所属分类:python实战
  1. import os
  2. import sys
  3. try:
  4.     import ConfigParser
  5. except ImportError:
  6.     import configparser as ConfigParser
  7. import argparse
  8. import yagmail
  9. from storage import Storage
  10. from logger import get_logger
  11. logger = get_logger()
  12. def get_argparse():
  13.     parser = argparse.ArgumentParser(description='A email client in terminal')
  14.     parser.add_argument('-s', action='store', dest='subject', required=True, help='specify a subject (must be in quotes if it has spaces)')
  15.     parser.add_argument('-a', action='store', nargs='*', dest='attaches', required=False, help='attach file(s) to the message')
  16.     parser.add_argument('-f', action='store', dest='conf', required=False, help='specify an alternate .emcli.cnf file')
  17.     parser.add_argument('-r', action='store', nargs='*', dest='recipients', required=True, help='recipient who you are sending the email to')
  18.     parser.add_argument('-v', action='version', version='%(prog)s 0.2')
  19.     return parser.parse_args()
  20. def get_config_file(config_file):
  21.     if config_file is None:
  22.         config_file = os.path.expanduser('~/.emcli.cnf')
  23.     return config_file
  24. def get_meta_from_config(config_file):
  25.     config = ConfigParser.SafeConfigParser()
  26.     with open(config_file) as fp:
  27.         config.readfp(fp)
  28.     meta = Storage()
  29.     for key in ['smtp_server', 'smtp_port', 'username', 'password']:
  30.         try:
  31.             val = config.get('DEFAULT', key)
  32.         except (ConfigParser.NoSectionError, ConfigParser.NoOptionError) as err:
  33.             logger.error(err)
  34.             raise SystemExit(err)
  35.         else:
  36.             meta[key] = val
  37.     return meta
  38. def get_email_content():
  39.     return sys.stdin.read()
  40. def send_email(meta):
  41.     content = get_email_content()
  42.     body = [content]
  43.     if meta.attaches:
  44.         body.extend(meta.attaches)
  45.     with yagmail.SMTP(user=meta.username, password=meta.password,
  46.                       host=meta.smtp_server, port=int(meta.smtp_port)) as yag:
  47.         logger.info('ready to send email "{0}" to {1}'.format(meta.subject, meta.recipients))
  48.         ret = yag.send(meta.recipients, meta.subject, body)
  49. def main():
  50.     parser = get_argparse()
  51.     config_file = get_config_file(parser.conf)
  52.     if not os.path.exists(config_file):
  53.         logger.error('{0} is not exists'.format(config_file))
  54.         raise SystemExit()
  55.     else:
  56.         meta = get_meta_from_config(config_file)
  57.     meta.subject = parser.subject
  58.     meta.recipients = parser.recipients
  59.     meta.attaches = parser.attaches
  60.     for attach in meta.attaches:
  61.         if not os.path.exists(attach):
  62.             logger.error('{0} is not exists'.format(attach))
  63.             raise SystemExit()
  64.     send_email(meta)
  65. if __name__ == '__main__':
  66.     main()
  67. import logging
  68. def get_logger(log_level=logging.INFO):
  69.     logger = logging.getLogger(__name__)
  70.     logger.setLevel(log_level)
  71.     formatter = logging.Formatter("%(asctime)s [emcli] [%(levelname)s] : %(message)s", "%Y-%m-%d %H:%M:%S")
  72.     handler = logging.StreamHandler()
  73.     handler.setFormatter(formatter)
  74.     logger.handlers = [handler]
  75.     return logger
  • 我的微信
  • 这是我的微信扫一扫
  • weinxin
  • 我的微信公众号
  • 我的微信公众号扫一扫
  • weinxin

说点什么

您将是第一位评论人!

提醒
avatar