最近一个项目中用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基础 如何让代码只执行一次

    1.0 最简单, 最高效的方式 C 代码运行起点 main 就是个大单例函数. 如果把函数注册在其里面, 那么一定很可以 :) // 某个库需要初始化的函数 void log_init(void) { ...

  2. Freemaker如何遍历key为non-string类型的map?

    (一) 前置知识 Freemaker默认配置下会使用SimpleHash去包装后台传递的hashmap,下段摘抄自官方reference 同样,当你传递进去一个hashmap实例时,会替换为一个sim ...

  3. systemd基础

    systemd 起源 systemd这一名字源于Unix中的一个惯例:在Unix中常以“d”作为系统守护进程(英语:daemon,亦称后台进程)的后缀标识.除此以外,systemd亦是借代英文术语D体 ...

  4. Effective C++笔记(二):构造/析构/赋值运算

    参考:http://www.cnblogs.com/ronny/p/3740926.html 条款05:了解C++默默编写并调用哪些函数 如果自定义一个空类的话,会自动生成默认构造函数.拷贝构造函数. ...

  5. HDU 2053 Switch Game(开灯问题,完全平方数)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2053 题目大意:灯开始是关着的,有n盏灯,i从1数到n每当灯的序号是i的倍数的时候就对灯进行一次操作( ...

  6. ActiveMQ objecmessage 无法调用问题。

    http://activemq.apache.org/objectmessage.html

  7. yii2 GirdView使用全教程

    开始GridView GridView主要是为了实现表格复用,尤其我们做后台的时候,你发现表单和表格占据了大部分页面,而表格的样式又是高度的统一,那么如果有这样一个挂件,传入数据集自动渲染表格该多好. ...

  8. zookeeper的简单使用

    前言 最近项目中要使用基于zookeeper的集中配置管理系统,而对于zookeeper仅在当初使用阿里开源分布式服务调用框架dubbo时简单的了解一下.本 文的主要目的,调用zkclient (ma ...

  9. centos7 lamp环境搭建

    一.安装Apache1.安装yum -y install httpd2.开启apache服务systemctl start httpd.service3.设置apache服务开机启动systemctl ...

  10. 阿里云ecs 服务器配置

    阿里云ecs 7.0+安装mysql 5.6 http://jingyan.baidu.com/article/454316ab67bd02f7a7c03af4.html 安装jdk yum -y i ...