Python Auto Reload とファイル変更管理
前にCherryPyのAutoReload機能についてメモったけど、今回はその中でもファイルの変更を監視してる部分をチェキ。
def autoreload(self): """Reload the process if registered files have been modified.""" sysfiles = [] #ファイルの事前処理 for k, m in sys.modules.items(): if re.match(self.autoreload_match, k): if hasattr(m, "__loader__"): if hasattr(m.__loader__, "archive"): k = m.__loader__.archive k = getattr(m, "__file__", None) sysfiles.append(k) #ここでファイルの最終変更時間を比較、異なる場合は再実行。 for filename in sysfiles + self.reload_files: if filename: if filename.endswith(".pyc"): filename = filename[:-1] oldtime = self.mtimes.get(filename, 0) if oldtime is None: # Module with no .py file. Skip it. continue try: mtime = os.stat(filename).st_mtime except OSError: # Either a module with no .py file, or it's been deleted. mtime = None if filename not in self.mtimes: # If a module has no .py file, this will be None. self.mtimes[filename] = mtime else: if mtime is None or mtime > oldtime: # The file has been deleted or modified. self.reexec()
すんません、かなり適当。けど今取り込んでるのでこのくらい。今度追記しておきます。