import pyinotify class EventHandler(pyinotify.ProcessEvent): def __init__(self, path): self.path = path def process_IN_MODIFY(self, event): print("File modified:", event.pathname) wm = pyinotify.WatchManager() notifier = pyinotify.Notifier(wm) paths = ['/opt/tomcat/logs', '/home/temp'] for path in paths: wm.add_watch(path, pyinotify.IN_MODIFY, rec=True, auto_add=True, event_class=EventHandler(path)) notifier.loop()代码报错:TypeError: add_watch() got an unexpected keyword argument 'event_class'
时间: 2024-01-11 18:03:14 浏览: 212
这个错误是因为在Pyinotify 0.9.6 版本中已经删除了`event_class`参数,所以需要升级到最新版本的Pyinotify。或者,你可以使用以下代码替换最后一行:
```
notifier.loop(event_loop=pyinotify.EventLoop(event_class=EventHandler(path)))
```
这里使用了`event_loop`参数,并将`event_class`作为参数传递给`EventHandler`。这样可以实现相同的效果。
相关问题
import pyinotify class EventHandler(pyinotify.ProcessEvent): def __init__(self, path): self.path = path def process_IN_MODIFY(self, event): print("File modified:", event.pathname) wm = pyinotify.WatchManager() notifier = pyinotify.Notifier(wm) paths = ['/opt/tomcat/logs', '/home/temp'] for path in paths: wm.add_watch(path, pyinotify.IN_MODIFY, rec=True, auto_add=True, event_class=EventHandler(path)) notifier.loop(event_loop=pyinotify.EventLoop(event_class=EventHandler(path))) 报错:wm.add_watch(path, pyinotify.IN_MODIFY, rec=True, auto_add=True, event_class=EventHandler(path)) TypeError: add_watch() got an unexpected keyword argument 'event_class'
根据Pyinotify文档,`add_watch()`方法没有`event_class`参数。您可以尝试修改如下代码:
```
class EventHandler(pyinotify.ProcessEvent):
def __init__(self, path):
self.path = path
def process_IN_MODIFY(self, event):
print("File modified:", event.pathname)
wm = pyinotify.WatchManager()
notifier = pyinotify.Notifier(wm, EventHandler())
paths = ['/opt/tomcat/logs', '/home/temp']
for path in paths:
wm.add_watch(path, pyinotify.IN_MODIFY, rec=True, auto_add=True)
notifier.loop()
```
在这个示例中,我们将`EventHandler`作为参数传递给`Notifier`的构造函数,而不是在`add_watch()`中使用`event_class`参数。
Python2.7 pyinotify
pyinotify是一个Python模块,可以使用该模块监视Linux系统上的文件系统事件。它是基于inotify系统调用实现的,可以跟踪文件或目录的创建、修改、删除、移动等事件。
以下是一个使用Python 2.7和pyinotify实现文件监控的示例代码:
```python
import pyinotify
# 定义事件处理类
class EventHandler(pyinotify.ProcessEvent):
def process_IN_CREATE(self, event):
print "Creating:", event.pathname
def process_IN_DELETE(self, event):
print "Removing:", event.pathname
# 创建inotify实例
wm = pyinotify.WatchManager()
# 监控所有事件类型
mask = pyinotify.ALL_EVENTS
# 创建事件处理器
handler = EventHandler()
# 创建Notifier实例,将WatchManager和EventHandler传入
notifier = pyinotify.Notifier(wm, handler)
# 添加监控路径
wm.add_watch('/tmp', mask, rec=True)
# 开始监控
notifier.loop()
```
在这个例子中,我们定义了一个EventHandler类作为事件处理器,用于处理IN_CREATE和IN_DELETE事件。在主程序中,我们创建了WatchManager、EventHandler和Notifier实例,并通过add_watch()方法将/tmp目录添加到监控列表中。最后,我们调用notifier.loop()方法开始监控。
当/tmp目录下的文件或子目录被创建、删除、修改等事件发生时,EventHandler类中对应的方法将被调用,并打印事件信息。
需要注意的是,pyinotify模块在Linux系统上需要使用root权限才能够正常运行。同时,在处理文件事件时,应该注意避免出现死循环等问题。
阅读全文