Python中用MacFSEvents模块监视MacOS文件系统改变一例
最近一个项目中用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文件系统改变一例的更多相关文章
- python中用psutil模块,yagmail模块监控CPU、硬盘、内存使用,阈值后发送邮件
import yagmailimport psutildef sendmail(subject,contents): #连接邮箱服务器 yag = yagmail.SMTP(user='邮箱名称@16 ...
- python的pymysql模块简介
一.介绍 在python中用pymysql模块来对mysql进行操作,该模块本质就是一个套接字客户端软件,使用前需要事先安装 pip3 install pymysql 二.操作简介 import py ...
- 【转】Python 3的pathlib模块:驯服文件系统
[转]Python 3的pathlib模块:驯服文件系统 https://python.freelycode.com/contribution/detail/1248 Python部落(python. ...
- python中os模块中文帮助
python中os模块中文帮助 python中os模块中文帮助文档文章分类:Python编程 python中os模块中文帮助文档 翻译者:butalnd 翻译于2010.1.7——2010.1.8 ...
- python的库有多少个?python有多少个模块?
这里列举了大概500个左右的库: ! Chardet字符编码探测器,可以自动检测文本.网页.xml的编码. colorama主要用来给文本添加各种颜色,并且非常简单易用. Prettytable主 ...
- Python中的模块介绍和使用
在Python中有一个概念叫做模块(module),这个和C语言中的头文件以及Java中的包很类似,比如在Python中要调用sqrt函数,必须用import关键字引入math这个模块,下面就来了解一 ...
- 周末班:Python基础之模块
什么是模块 什么是模块? 常见的场景:一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀. 但其实import加载的模块分为四个通用类别: 1 使用python编写 ...
- 第四章:4.0 python常用的模块
1.模块.包和相关语法 使用模块好处: 最大的好处是大大提高了代码的可维护性.其次,编写代码不必从零开始.当一个模块编写完毕,就可以被其他地方引用.我们在编写程序的时候,也经常引用其他模块,包括Pyt ...
- python中confIgparser模块学习
python中configparser模块学习 ConfigParser模块在python中用来读取配置文件,配置文件的格式跟windows下的ini配置文件相似,可以包含一个或多个节(section ...
随机推荐
- 26_Python的内置函数
The Python interpreter has a number of functions and types built into it that are always available.P ...
- ASP .NET CORE MVC 部署Windows 系统上 IIS具体步骤---.Net Core 部署到 IIS位系统中的步骤
一.IIS 配置 启用 Web 服务器 (IIS) 角色并建立角色服务. 1.Windows Ddesktop 桌面操作系统(win7及更高版本) 导航到“控制面板” > “程序” > “ ...
- 在 ASP.NET Core 具体使用文档
https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/hosting?tabs=aspnetcore2x
- Delphi 中的自动释放策略
来自万一老师的博客:http://www.cnblogs.com/del/archive/2011/12/21/2295794.html ------------------------------- ...
- 1、量化投资—为什么选择Python?
Python在量化领域的现状 就跟Java在web领域无可撼动的地位一样,Python也已经在金融量化投资领域占据了重要位置,从各个业务链条都能找到相应的框架实现. 在量化投资(证券和比特币)开源项目 ...
- bootstrap使用前注意点和盒子模型
bootstrap注意事项: https://getbootstrap.com/docs/4.0/getting-started/introduction/#quick-start 盒子模型: htt ...
- EF – 6.一对一关联
5.6.6 <一对一关联概述> 5.6.7 <一对一关联CRUD演示> 在两讲视频中,首先介绍了数据库中一对一关联表的设计规范,接着通过实例介绍了如何合适Entity Fr ...
- Go语言入门之切片的概念
切片是对数组的抽象,对切片的改变会改变原数组的值 package main import "fmt" func test6(){ arr:=[...],,,,,,,,,,} s1: ...
- Jmeter------将JDBC Request的查询结果作为另一个接口的请求参数
一.前言 jmeter已配置连接成功数据库,不会的可查看:https://www.cnblogs.com/syw20170419/p/9832402.html 二.需求 将JDBC Request的r ...
- iptables配置文件
https://www.cnblogs.com/itxiongwei/p/5871075.html