reloader.py 773 B

12345678910111213141516171819202122232425262728
  1. import os
  2. from os import path
  3. import sys
  4. import thread
  5. import time
  6. def init(server):
  7. thread.start_new_thread(_reload, (server,))
  8. def _reload(server):
  9. import inotifyx
  10. fd = inotifyx.init()
  11. rootdir = path.dirname(path.abspath(__file__))
  12. for dirpath, _, _ in os.walk(rootdir):
  13. inotifyx.add_watch(fd, dirpath, inotifyx.IN_CLOSE_WRITE)
  14. while True:
  15. events = inotifyx.get_events(fd)
  16. for event in events:
  17. if event.name == '4913': # https://code.google.com/p/vim/source/browse/src/fileio.c?spec=svn94df797ed6b03d5387b5ed7526f8c65024112822&r=29eb4c2a33ac701bfcd4d2e2bed7864eba876e0e#3767
  18. continue
  19. elif event.name.endswith('.py'):
  20. print event.name, 'changed, reloading...'
  21. os.close(fd)
  22. server.stop()
  23. os.execv(sys.argv[0], sys.argv)
  24. return