zoukankan      html  css  js  c++  java
  • python3 监控代码变化 自动重启 提高开发效率

    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-
    
    __author__ = 'Michael Liao'
    
    import os, sys, time, subprocess
    
    from watchdog.observers import Observer
    from watchdog.events import FileSystemEventHandler
    
    def log(s):
        print('[Monitor] %s' % s)
    
    class MyFileSystemEventHander(FileSystemEventHandler):
    
        def __init__(self, fn):
            super(MyFileSystemEventHander, self).__init__()
            self.restart = fn
    
        def on_any_event(self, event):
            if event.src_path.endswith('.py'):
                log('Python source file changed: %s' % event.src_path)
                self.restart()
    
    command = ['echo', 'ok']
    process = None
    
    def kill_process():
        global process
        if process:
            log('Kill process [%s]...' % process.pid)
            process.kill()
            process.wait()
            log('Process ended with code %s.' % process.returncode)
            process = None
    
    def start_process():
        global process, command
        log('Start process %s...' % ' '.join(command))
        process = subprocess.Popen(command, stdin=sys.stdin, stdout=sys.stdout, stderr=sys.stderr)
    
    def restart_process():
        kill_process()
        start_process()
    
    def start_watch(path, callback):
        observer = Observer()
        observer.schedule(MyFileSystemEventHander(restart_process), path, recursive=True)
        observer.start()
        log('Watching directory %s...' % path)
        start_process()
        try:
            while True:
                time.sleep(0.5)
        except KeyboardInterrupt:
            observer.stop()
        observer.join()
    
    if __name__ == '__main__':
        argv = sys.argv[1:]
        if not argv:
            print('Usage: ./pymonitor your-script.py')
            exit(0)
        if argv[0] != 'python3':
            argv.insert(0, 'python3')
        command = argv
        path = os.path.abspath('.')
        start_watch(path, None)

    保存未check.py
    启动监控 执行run.py
    python3 check.py run.py

    当目录下面代码有变化时会重启run.py

  • 相关阅读:
    google 语音识别返回,
    如果到来,会是怎样情况,fuck,
    sql
    阅读《一》
    阅读,
    Codevs 1078 ==Poj 1258 Agri-Net
    洛谷 P3399 丝绸之路
    线段树-代码实现细节与技巧
    Codevs 1371 浴火银河跑运输
    POJ 3267 The Cow Lexicon
  • 原文地址:https://www.cnblogs.com/xielisen/p/6867463.html
Copyright © 2011-2022 走看看