部门新来了个同事,负责视频编导和制作。经常需要使用Premiere渲染视频,这是一项十分费时的工作,动辄3-4个小时。

同事时常在傍晚4-5点开始渲染视频,待其完成,将渲染好的视频发送出去,再关闭电脑回家。这样一来,往往就到晚上9/10点了。

这样一来,就没空做晚饭和次日的便当了,念其厨艺棒极,为了午饭时间能闻到土豆炖牛肉的香味,我决定写个脚本完成这个工作。


#思路 ###任务描述 写一个python脚本,该脚本运行在Windows环境下,该脚本监控视频导出目录,发现视频文件生成时,将其同步到云盘,同步完成后给相关人员发送邮件,通知其下载。此后关机。

###任务分解 * 在Windows搭建python环境(easy) * 使用watchdog监控视频导出目录变化 * 使用bypy同步文件到百度网盘 * 使用smtp发送邮件 * 关机:from sys import system;system('halt')

#准备工作 * 在windows下配置好python环境,安装pip * 安装python * 下载 easy_install到Python文件夹 点击安装
* 添加环境变量 D:\Python27 与 D:\Python27\Scripts * cmd > easy_install pip * pip install bypy -i http://pypi.douban.com/simple * pip install watchdog -i http://pypi.douban.com/simple

###配置bypy 在终端执行bypy.py info,之后按照提示操作就行

#show my code ###源代码 看这里:for_dinner

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#for_dinner.py
#!/usr/bin/env python
# encoding: utf-8

import sys
import time
import logging
from watchdog.observers import Observer
from watchdog.events import LoggingEventHandler,FileSystemEventHandler

from send_emails import send_mail
import commands
from os import system
from config import watchdir,watch_file_type,remotedir

def notice2download(sub=u"下载视频",content=u"请登录百度网盘"):
    send_mail(sub,content)

def upload_watch_file(file):
    pass

class MyHandler(FileSystemEventHandler):
    def on_created(self, event):
        if (event.src_path).endswith(watch_file_type):
            print event.src_path
            #上传到云盘
            mycommands = "bypy.py upload " + event.src_path + " " + remotedir
            output = commands.getoutput(mycommands)
            print output
            #发送邮件
            content = u"新建文件:"+event.src_path
            notice2download(content=content)
            time.sleep(60*10) #十分钟后关机
            system('halt')

    def on_modified(self, event):
        if (event.src_path).endswith(watch_file_type):     #监控指定文件内容、权限等变化
            print "log file %s changed!" % event.src_path

if __name__ == "__main__":
    path = sys.argv[1] if len(sys.argv) > 1 else watchdir
    event_handler = MyHandler()
    observer = Observer()
    observer.schedule(event_handler, path, recursive=True)
    observer.start()
    try:
        while True:
            time.sleep(1)
    except KeyboardInterrupt:
        observer.stop()
    observer.join()          
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#send_emails.py
#!/usr/bin/env python
# encoding: utf-8

import smtplib
from email.mime.text import MIMEText
from config import mailto_list,mail_host,mail_user,mail_pass



def send_mail(sub,content,to_list=mailto_list):
    msg = MIMEText(content, 'html', 'utf-8')
    msg['Subject'] = sub
    msg['From'] = mail_user
    try:
        server = smtplib.SMTP()
        server.connect(mail_host)
        server.login(mail_user,mail_pass)
        server.sendmail(mail_user, to_list, msg.as_string())
        server.close()
        return True
    except Exception, e:
        print str(e)
        return False

配置文件

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
#config.py
#!/usr/bin/env python
# encoding: utf-8

watchdir = "/tmp" #监控的目录
watch_file_type = "txt" #监控的文件类型
remotedir = "remotedir" #云盘上的目录,需要先创建bypy.py mkdir remotedir
mailto_list=["someone@example.com",] #接收人
mail_host="smtp.example.com"  #设置服务器
mail_user="user@example.com"    #用户名
mail_pass="password"   #口令

#使用 ###mac/linux sudo python for_dinner.py

其中/tmp是需要监控的目录

关机权限需要sudo

###windows 写一个bat脚本

1
2
#run.bat
python for_dinner.py

右键以管理员身份运行