Spaces:
Sleeping
Sleeping
import os | |
import subprocess | |
import sys | |
import time | |
from watchdog.events import FileSystemEventHandler | |
from watchdog.observers import Observer | |
class Watcher: | |
DIRECTORY_TO_WATCH = os.path.dirname(os.path.abspath(__file__)) | |
def __init__(self, script_name): | |
self.script_name = script_name | |
self.observer = Observer() | |
def run(self): | |
event_handler = Handler(self.script_name) | |
self.observer.schedule(event_handler, self.DIRECTORY_TO_WATCH, recursive=True) | |
self.observer.start() | |
try: | |
while True: | |
time.sleep(1) | |
except KeyboardInterrupt: | |
self.observer.stop() | |
self.observer.join() | |
class Handler(FileSystemEventHandler): | |
def __init__(self, script_name): | |
self.script_name = script_name | |
self.process = subprocess.Popen([sys.executable, self.script_name]) | |
def on_any_event(self, event): | |
if event.event_type == "modified" and event.src_path.endswith(".py"): | |
print(f"{event.src_path} changed. Restarting script...") | |
self.process.terminate() | |
self.process = subprocess.Popen([sys.executable, self.script_name]) | |
if __name__ == "__main__": | |
# Replace 'app.py' with the name of your main Python script | |
w = Watcher("app.py") | |
w.run() | |