• 又是一篇教你摸鱼的文章,用Python实现自动发送周报给老板


    前言

    有没有哪个同志跟我一样,每周都要写工作周报

    像我这种记性不好的,一个月四周忘记三次

    索性就用Python写个小工具,让它每周帮我给老板发周报~

    在这里插入图片描述

    Github: Weekday 小工具

    提出目标

    源码.资料.素材.点击领取即可

    想有一个工具能发邮件

    目标细化

    • SMTP发送邮件, 用smtplib
    • 读取配置文件
    • 发件人
    • 收件人
    • 抄送到哪些人
    • 我的账户,密码, 昵称
    • 参数化命令行,用argparse
      支持markdown to HTML

    在这里插入图片描述

    脑补使用方式

    简单使用

    cmd -a "工作内容" -p # 打印success
    
    • 1

    复杂使用

    cmd -e -p # 激活vim, 然后:wq之后继续cmd执行, 就向git commit -a, 不过要打印success
    ~~~python
    忘了自己写的程序怎么用
    ~~~python
    cmd -h # 打印帮助信息
    
    • 1
    • 2
    • 3
    • 4
    • 5

    设计程序

    有一个临时文件, 用来存放记录. 每次发送邮件之后, 将临时文件归档处理.

    # 临时文件, 存在~/.weekday/current.rp
    [global]
    editor = vim
    [to]
    email = 
    cc = 
    [from]
    email = 
    password = 
    nickname = 
    [SMTP]
    host = smtp.exmail.qq.com
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    能在python脚本在执行时, 读去到这个配置文件

    # 获取配置项示例
    import ConfigParser
    config = ConfigParser.ConfigParser()
    config.readfp(open('文件名'))
    defaultEditor = confg.get('global', 'editor') # 返回vim
    
    • 1
    • 2
    • 3
    • 4
    • 5

    可以解析在执行命令时传入的参数

    python学习交流Q裙 770699889###
    import argparse
    parser = argparse.ArgumentParser(
        description='Tell your leader what you did this week')
    # define command line parameters
    parser.add_argument('-v', '--version',
                        action='store_true',
                        help='show the version information')
    parser.add_argument('-e', '--edit',
                        action='store_true',
                        help='open default editor for editing report')
    args = parser.parse_args()
    print args
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    准备发送邮件, 先把markdown转成HTML, 然后使用smtplib发送邮件.

    import smtplib
    import mistune
    from email.mime.text import MIMEText
    content = mistune.markdown(content, escape=True, hard_wrap=True)
    msg = MIMEText(content, 'html', 'utf-8')
    msg['Subject'] = u'工作周报 %s\r\n' % date
    msg['From'] = hFrom
    msg['To'] = hTo
    msg['Cc'] = hCc
    smtp = smtplib.SMTP(conf['host'])
    smtp.login(conf['from_email'], conf['password'])
    smtp.sendmail(conf['from_email'],
                  TO_ADDR + CC_ADDR,
                  msg.as_string())
    smtp.close()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    在这里插入图片描述

    开始写代码

    源码.资料.素材.点击领取即可

    细分功能实现的关键代码都已经整理好了. 现在只需要通过一串逻辑将她们联系起来. 看上去就能完成目标了.

    python学习交流Q裙 770699889###
    # main.py
    def main():
        args = loadArguments()
        if args.version:
            print DESC
        if args.append:
            append(args.append, tmpFileName)
        // ... other code ...
    if __name__ == '__main__':
        main()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    python main.py -a Hello -p
    
    • 1

    最后只需要配合crontab工具, 就可以实现周期性定时发送了

    # crontab -l
    SHELL=/bin/zsh
    PATH=/usr/local/bin
    HOME=/Users/qiuwei
    # run tasks
    # minute hour day month week command
    0 18 * * 5 wp -p
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    在这里插入图片描述

  • 相关阅读:
    安卓‘进度条ProgressBar’中‘setIndeterminate()’方法
    设计模式之代理模式(Proxy Pattern)
    linux 下使用 sar -n 命令查看Kbps、bps的带宽速率
    nginx配置奇怪的问题
    计算节点的网络地址(用16进制表示)
    RationalDMIS 2022位置度评价,轮廓度评价时, 元素理论值变了,如何一劳永逸解决!
    LeetCode第29题-两数相除-java实现-图解思路与手撕代码
    微信小程序怎么通过图片链接获取图片宽高比(适合在下载图片前获取宽高比)
    Hive矢量化
    校招期间 准备面试算法岗位 该怎么做?
  • 原文地址:https://blog.csdn.net/yxczsz/article/details/127560712