当前位置:   article > 正文

Python中用MacFSEvents模块监视MacOS文件系统改变一例

macos python 检测文件是否变化

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

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

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

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

 1 #!/usr/bin/env python2
 2 #-*- coding: utf-8 -*-
 3 
 4 import os,sys,signal                    
 5 from   fsevents import Observer
 6 from   fsevents import Stream  
 7 
 8 def callback(FileEvent):
 9     # attributes of FileEvent:mask, cookie and name.
10     # mask: 512-delete;256-create;2-changed;...
11     if FileEvent.name.endswith("index.html") and FileEvent.mask == 256:
12         print "site rebuild. redeploy extra assets"
13         os.system("gulp")
14     elif FileEvent.name.endswith(".scss") and FileEvent.mask == 2:
15         print "scss changed! compile and redeploy extra assets"
16         os.system("gulp sass")
17 
18 def child():
19     observer  = Observer()
20     stream    = Stream(callback, ".", file_events=True)
21     observer.schedule(stream)
22     observer.start()
23 
24 class Watcher:  
25     """ 
26      创建一个做苦工的子进程。然后父进程等待
KeyboardInterrupt并杀掉子进程。
27
28 """ 29 30 def __init__(self): 31 self.child = os.fork() 32 if self.child == 0: 33 child() 34 else: 35 self.watch() 36 37 def watch(self): 38 try: 39 os.wait() 40 except KeyboardInterrupt: 41 #捕获 Control+C,杀掉子进程 42 print 'KEYBOARDINTERRUPT\n' 43 self.kill() 44 sys.exit() 45 46 def kill(self): 47 try: 48 os.kill(self.child, signal.SIGKILL) 49 except OSError: pass 50 51 52 if __name__ == '__main__': 53 Watcher()

 

转载于:https://www.cnblogs.com/agateriver/p/5546394.html

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/272351
推荐阅读
相关标签
  

闽ICP备14008679号