• 又是一篇教你摸鱼的文章,用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

    在这里插入图片描述

  • 相关阅读:
    数字化转型:云表低代码开发助力制造业腾飞
    STM32cubeIDE 更改Repository folder
    python 之异常处理结构
    每日一记 Java常用API
    LINUX入门篇【8】----计算机组成原理以及OS知识的总结
    Github 2024-04-24 C开源项目日报 Top9
    【LeetCode 力扣】3.无重复字符的最长子串 Java实现 滑动窗口
    【每日随笔】毕业论文答辩 ① ( 答辩流程梳理 | 答辩的一些注意点 )
    【Mybatis实战】01——demo入门案例
    matlab knn方法快速实现,手把手教学
  • 原文地址:https://blog.csdn.net/yxczsz/article/details/127560712