最近一个项目中用gulp-watch不能满足需求,于是想到了用Python来解决问题。在安装了MacFSEvents模块后,写了下面一个小程序。

#!/usr/bin/env python2
#-*- coding: utf-8 -*- import os,sys,signal
from fsevents import Observer
from fsevents import Stream def callback(FileEvent):
# attributes of FileEvent:mask, cookie and name.
# mask: 512-delete;256-create;2-changed
if FileEvent.name.endswith("index.html") and FileEvent.mask == 256:
print "site rebuild. redeploy extra assets"
os.system("gulp")
elif FileEvent.name.endswith(".scss") and FileEvent.mask == 2:
print "scss changed! compile and redeploy extra assets"
os.system("gulp sass") if __name__ == '__main__':
observer = Observer()
stream = Stream(callback, ".", file_events=True)
observer.schedule(stream)
observer.start()
#按Control+\强制结束

但是运行时发现只能用Control+\强杀进程,而不能用Control+C结束。

经google搜索及自行研究结果,得到下面这段程序。用fork子进程的方法,使得进程响应Control+C 退出。

 #!/usr/bin/env python2
#-*- coding: utf-8 -*- import os,sys,signal
from fsevents import Observer
from fsevents import Stream def callback(FileEvent):
# attributes of FileEvent:mask, cookie and name.
# mask: 512-delete;256-create;2-changed;...
if FileEvent.name.endswith("index.html") and FileEvent.mask == 256:
print "site rebuild. redeploy extra assets"
os.system("gulp")
elif FileEvent.name.endswith(".scss") and FileEvent.mask == 2:
print "scss changed! compile and redeploy extra assets"
os.system("gulp sass") def child():
observer = Observer()
stream = Stream(callback, ".", file_events=True)
observer.schedule(stream)
observer.start() class Watcher:
"""
      创建一个做苦工的子进程。然后父进程等待KeyboardInterrupt并杀掉子进程。
27
""" def __init__(self):
self.child = os.fork()
if self.child == 0:
child()
else:
self.watch() def watch(self):
try:
os.wait()
except KeyboardInterrupt:
#捕获 Control+C,杀掉子进程
print 'KEYBOARDINTERRUPT\n'
self.kill()
sys.exit() def kill(self):
try:
os.kill(self.child, signal.SIGKILL)
except OSError: pass if __name__ == '__main__':
Watcher()

Python中用MacFSEvents模块监视MacOS文件系统改变一例的更多相关文章

  1. python中用psutil模块,yagmail模块监控CPU、硬盘、内存使用,阈值后发送邮件

    import yagmailimport psutildef sendmail(subject,contents): #连接邮箱服务器 yag = yagmail.SMTP(user='邮箱名称@16 ...

  2. python的pymysql模块简介

    一.介绍 在python中用pymysql模块来对mysql进行操作,该模块本质就是一个套接字客户端软件,使用前需要事先安装 pip3 install pymysql 二.操作简介 import py ...

  3. 【转】Python 3的pathlib模块:驯服文件系统

    [转]Python 3的pathlib模块:驯服文件系统 https://python.freelycode.com/contribution/detail/1248 Python部落(python. ...

  4. python中os模块中文帮助

    python中os模块中文帮助   python中os模块中文帮助文档文章分类:Python编程 python中os模块中文帮助文档 翻译者:butalnd 翻译于2010.1.7——2010.1.8 ...

  5. python的库有多少个?python有多少个模块?

    这里列举了大概500个左右的库: !   Chardet字符编码探测器,可以自动检测文本.网页.xml的编码. colorama主要用来给文本添加各种颜色,并且非常简单易用. Prettytable主 ...

  6. Python中的模块介绍和使用

    在Python中有一个概念叫做模块(module),这个和C语言中的头文件以及Java中的包很类似,比如在Python中要调用sqrt函数,必须用import关键字引入math这个模块,下面就来了解一 ...

  7. 周末班:Python基础之模块

    什么是模块 什么是模块? 常见的场景:一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀. 但其实import加载的模块分为四个通用类别: 1 使用python编写 ...

  8. 第四章:4.0 python常用的模块

    1.模块.包和相关语法 使用模块好处: 最大的好处是大大提高了代码的可维护性.其次,编写代码不必从零开始.当一个模块编写完毕,就可以被其他地方引用.我们在编写程序的时候,也经常引用其他模块,包括Pyt ...

  9. python中confIgparser模块学习

    python中configparser模块学习 ConfigParser模块在python中用来读取配置文件,配置文件的格式跟windows下的ini配置文件相似,可以包含一个或多个节(section ...

随机推荐

  1. [转载]C++多态技术

    摘自: http://www.royaloo.com/articles/articles_2003/PolymorphismInCpp.htm http://blog.sciencenet.cn/bl ...

  2. maven将jar包打如本地仓库命令

    mvn install:install-file -DgroupId=org.apache.maven.plugins -DartifactId=maven-javadoc-plugin -Dvers ...

  3. 部署weblogic 12c的几点收获

    最近刚编写完weblogic12c的部署脚本,这里将过程中的几点收获进行记录: 1.windows下编写的脚本在linux环境下运行需要dos2unix进行格式转换 2.weblogic安装环境检测需 ...

  4. python继承问题

    python构造函数:__init__(): 如果子类定义了自己的__init__构造方法函数,当子类的实例对象被创建时,子类只会执行自己的__init__方法函数,如果子类未定义自己的构造方法函数, ...

  5. apache 软件历史版本查询

    http://archive.apache.org/dist/ http://archive.apache.org/dist/struts/binaries/

  6. sad 关于一些html5新属性还需要用https才能支持

    像我昨天在搞一个录音的小东西 在本地正常录音正常播放 但是放到线上环境http环境上就出现了如上的错误 功能都不能正常使用 然后就改成https线上环境  然后就正常了 如上 大家有什么赐教的欢迎留言 ...

  7. beego学习笔记(4):开发文档阅读(5)

    controller的逻辑: 我们看下面的代码,就知道怎么传值的: import ( "github.com/astaxie/beego" ) type MainControlle ...

  8. Django的自带认证系统——auth模块

    Django自带的用户认证 auth模块 from django.contrib import auth 备注:使用auth模块时,我们默认使用Django提供的auth_user表,创建数据时,可以 ...

  9. 深度学习方法(九):自然语言处理中的Attention Model注意力模型

    欢迎转载,转载请注明:本文出自Bin的专栏blog.csdn.NET/xbinworld. 技术交流QQ群:433250724,欢迎对算法.技术感兴趣的同学加入. 上一篇博文深度学习方法(八):Enc ...

  10. 三十分钟理解博弈论“纳什均衡” -- Nash Equilibrium

    欢迎转载,转载请注明:本文出自Bin的专栏blog.csdn.net/xbinworld. 技术交流QQ群:433250724,欢迎对算法.技术感兴趣的同学加入. 纳什均衡(或者纳什平衡),Nash ...