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

转载于:https://www.cnblogs.com/xielisen/p/6867463.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python 是一种开源的高级编程语言,在网络工程、运维和自动化脚本开发等领域有着广泛的应用。以下是一个 Python 网工运维自动化脚本的案例。 假设我们要完成一个自动化批量管理服务器的脚本。我们首先需要使用 Python 的 Paramiko 模块来建立与服务器的 SSH 连接,通过 SSH 协议进行远程管理。然后,我们可以编写一个函数,用于执行远程命令,例如重启服务器、查看系统信息等。 利用这个函数,我们可以编写一个批量执行命令的函数,它可以从一个配置文件中读取服务器的信息,然后依次连接到每个服务器,并执行相同的命令。这样就实现了批量管理服务器的功能。 另外,我们可以编写一个函数,来分析服务器的日志文件。我们可以使用 Python 的 re 模块来进行正则表达式的匹配,从日志文件中提取关键信息,例如错误日志、访问次数等。然后,我们可以进一步处理这些提取出来的信息,如生成报表、发送警报等。 此外,我们还可以使用 Python 的 requests 模块进行网络请求,例如发送 HTTP 请求来检查网站的可用性、获取网页内容等。我们可以编写一个自动监控脚本,定期执行这些请求并分析返回的结果,如果发现异常就发送警报。 综上所述,Python 网工运维自动化脚本充分利用了 Python 强大的网络处理、文本处理和自动化编程能力,可以提高运维效率,减少重复工作,帮助管理员更好地管理和监控服务器。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值