首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >监视更改的监视文件

监视更改的监视文件
EN

Stack Overflow用户
提问于 2013-09-04 02:42:28
回答 3查看 80.4K关注 0票数 64

我需要查看日志文件中的更改。在浏览了stackoverflow问题之后,我发现人们推荐watchdog。因此,我正在尝试测试,但不确定当文件发生更改时应将代码添加到何处:

代码语言:javascript
复制
import time
from watchdog.observers import Observer
from watchdog.events import LoggingEventHandler

if __name__ == "__main__":
    event_handler = LoggingEventHandler()
    observer = Observer()
    observer.schedule(event_handler, path='.', recursive=False)
    observer.start()
    try:
        while True:
            time.sleep(1)
        else:
            print "got it"
    except KeyboardInterrupt:
        observer.stop()
    observer.join()

如果文件已被添加/更改,我应该在while循环中添加"got it“吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-09-04 02:48:41

定义你处理程序而不是LoggingEventHandler

代码语言:javascript
复制
#!/usr/bin/python
import time
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler


class MyHandler(FileSystemEventHandler):
    def on_modified(self, event):
        print(f'event type: {event.event_type}  path : {event.src_path}')


if __name__ == "__main__":
    event_handler = MyHandler()
    observer = Observer()
    observer.schedule(event_handler, path='/data/', recursive=False)
    observer.start()

    try:
        while True:
            time.sleep(1)
    except KeyboardInterrupt:
        observer.stop()
    observer.join()

当文件或目录被修改时,将调用on_modified

票数 118
EN

Stack Overflow用户

发布于 2019-07-26 21:36:17

下面是一个代码片段,可以防止它像其他人在@alecxe answer中所说的那样运行两次:

代码语言:javascript
复制
from datetime import datetime, timedelta

class MyHandler(FileSystemEventHandler):
    def __init__(self):
        self.last_modified = datetime.now()

    def on_modified(self, event):
        if datetime.now() - self.last_modified < timedelta(seconds=1):
            return
        else:
            self.last_modified = datetime.now()
        print(f'Event type: {event.event_type}  path : {event.src_path}')
        print(event.is_directory) # This attribute is also available
票数 10
EN

Stack Overflow用户

发布于 2021-02-06 00:17:40

您可以使用src_path检查逻辑,而不是datetime,因为如果检查超过1秒的datetime逻辑将失败。

代码语言:javascript
复制
class EventHandler(FileSystemEventHandler):
    def __init__(self):
        self.src_path = ''

    def on_modified(self, event):
        if self.src_path == event.src_path:
            return
        else:
            self.src_path = event.src_path
        logger.info(f"{event.event_type} occured on file {self.src_path}")
        #your long processing logics goes here.
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18599339

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档