如何使用python脚本实现对windows系统监控

如何使用python脚本实现对windows系统监控,第1张

示例:

#!/usr/bin/env python

# encoding: utf-8

"""

MonitorLog.py

Usage: MonitorLog.py ...

Monitor the log file

-f  log file

-h  help info

python MonitorLog.py -f C:\monitor.log

Created by zhoubo on 2011-08-29.

"""

import sys

import os

import getopt

import subprocess

import time

import codecs

import winsound

ABSPATH = os.path.dirname(os.path.abspath(__file__))

MONITERCONF = 'moniter_keyword.txt' #utf8 file

def main():

    try:

        opts, args = getopt.getopt(sys.argv[1:], 'hf:')

    except getopt.GetoptError, err:

        print str(err)

        print __doc__

        return 1

    path = ''

    for k, v in opts:

        if k == '-f':

            path = v

        elif k == '-h':

            print __doc__

            return 0

    if not (path and os.path.exists(path)):

        print 'Invalid path: %s' % path 

        print __doc__

        return 2

    #命令行元组

    cmd = ('tail', '-f', path)

    print ' '.join(cmd)

    output = subprocess.Popen(cmd, stdout=subprocess.PIPE)

    keywordMap = {}

    #加载监控的关键字信息

    with codecs.open(os.path.join(ABSPATH, MONITERCONF), 'r', 'utf8') as f:

        lines = f.readlines()

    for line in lines:

        line = line.strip()

        if not line:

            continue

        keyword, wav = line.strip().split(':')

        keywordMap[keyword] = wav

    while True:

        line = output.stdout.readline()

        #process code,得到输出信息后的处理代码

        if not line:

            time.sleep(0.01)

            continue

        line = line.strip().decode('utf8')

        print line

        for keyword in keywordMap:

            if line.find(keyword) > -1:

                winsound.PlaySound(keywordMap[keyword], 

                                   winsound.SND_NODEFAULT)

        #time.sleep(0.01)

    return 0

if __name__ == '__main__':

    sys.exit(main())

打算写一个文件监控的python程序

了解了一下watchdog这个库

打算学习一下=。=

watchdog用来监控指定目录/文件的变化,如添加删除文件或目录、修改文件内容、重命名文件或目录等,每种变化都会产生一个事件,且有一个特定的事件类与之对应,然后再通过事件处理类来处理对应的事件,怎么样处理事件完全可以自定义,只需继承事件处理类的基类并重写对应实例方法。

上面两个是events和observer

介绍一下

主要的内容都在events这个文件里面

包含了所有的可监听的事件

看一下例子的 LoggingEventHandler

watchdog.events.FileSystemEventHandler()

事件处理器的基类,用于处理事件,用户需继承该类,并在子类中重写对应方法。

类实例方法如下:

该类实现了监控文件变化,触发对应的事件类,然后调用关联的事件处理类来处理事件。该类其实是threading.Thread的子类,通过observer.start()使之运行在一个线程中,不会阻塞主进程运行,然后可以调用observer.stop()来停止该线程

实例属性及方法:

observer.schedule(event_handler, path, recursive=False)

监控指定路径path,该路径触发任何事件都会调用event_handler来处理,如果path是目录,则recursive=True则会递归监控该目录的所有变化。每一次调用schedule()对一个路径进行监控处理就叫做一个watch,schedule()方法会返回这个watch,接着可以对这个watch做其他 *** 作,如为该watch增加多个event处理器等

注:内部由一个字典handlers来保存所有watch,watch的值是一个集合,包含对应此watch的所有event handler:

https://pythonhosted.org/watchdog/

https://blog.csdn.net/chdhust/article/details/50514391

差不多懂了=。=可以写一个文件监控了=。=只要继承一下 FileSystemEventHandler 然后重写一下函数就行了

github: https://github.com/woadsl1234/FileMonitor


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/12196508.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存