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, 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()报错: notifier = pyinotify.Notifier(wm, EventHandler()) TypeError: __init__() takes exactly 2 arguments (1 given)
时间: 2024-01-11 08:02:42 浏览: 35
这个错误提示说明 `EventHandler` 类的 `__init__` 方法需要传入 `path` 参数,但是在 `pyinotify.Notifier` 实例化时没有传入该参数,因此需要在实例化 `EventHandler` 时传入 `path` 参数,例如:
```python
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, EventHandler('/opt/tomcat/logs'))
wm.add_watch('/opt/tomcat/logs', pyinotify.IN_MODIFY, rec=True, auto_add=True)
notifier.loop()
```
注意,`wm.add_watch` 也需要改为仅传入一个路径参数。如果你想监控多个路径,可以在循环中分别创建 `EventHandler` 实例,并为每个实例传入相应的路径参数。
相关问题
如何利用 pyinotify 在一个python脚本中,监控多个路径
可以使用pyinotify中的WatchManager来监控多个路径,具体步骤如下:
1. 创建WatchManager对象并实例化一个Notifier对象。
```
import pyinotify
wm = pyinotify.WatchManager()
notifier = pyinotify.Notifier(wm)
```
2. 为每个要监控的路径创建一个ProcessEvent子类,并在类的process_IN_MODIFY方法中定义响应逻辑。
```
class EventHandler(pyinotify.ProcessEvent):
def __init__(self, path):
self.path = path
def process_IN_MODIFY(self, event):
print("File modified:", event.pathname)
```
3. 将每个路径和其对应的ProcessEvent子类实例添加到WatchManager中。
```
paths = ['/path/to/dir1', '/path/to/dir2', '/path/to/dir3']
for path in paths:
wm.add_watch(path, pyinotify.IN_MODIFY, rec=True, auto_add=True, event_class=EventHandler)
```
其中,add_watch方法的参数说明如下:
- path:要监控的路径。
- pyinotify.IN_MODIFY:要监控的事件类型(这里是文件修改事件)。
- rec=True:递归地监控子目录。
- auto_add=True:自动添加新创建的子目录。
- event_class=EventHandler:要使用的ProcessEvent子类。
4. 启动Notifier对象,开始监控。
```
notifier.loop()
```
完整代码示例:
```
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 = ['/path/to/dir1', '/path/to/dir2', '/path/to/dir3']
for path in paths:
wm.add_watch(path, pyinotify.IN_MODIFY, rec=True, auto_add=True, event_class=EventHandler(path))
notifier.loop()
```
pyinotify,在指定路径下监视包含以core开头,.dmp结尾的文件(用正则表达式),并输出该文件的大小
可以使用pyinotify库来实现在指定路径下监视文件变化的功能。下面是一个示例代码,可以监视包含以core开头,.dmp结尾的文件,并输出该文件的大小:
```python
import pyinotify
import re
import os
class EventHandler(pyinotify.ProcessEvent):
def process_IN_CLOSE_WRITE(self, event):
if re.match(r'^core.*\.dmp$', event.name):
file_path = os.path.join(event.path, event.name)
file_size = os.path.getsize(file_path)
print(f"{file_path} size: {file_size}")
def watch_dir(path):
wm = pyinotify.WatchManager()
mask = pyinotify.IN_CLOSE_WRITE
handler = EventHandler()
notifier = pyinotify.Notifier(wm, handler)
wm.add_watch(path, mask, rec=True)
notifier.loop()
if __name__ == '__main__':
watch_dir('/path/to/watch')
```
这个代码中,我们先定义了一个 `EventHandler` 类,它继承了 `pyinotify.ProcessEvent` 类,并实现了 `process_IN_CLOSE_WRITE` 方法。当被监视的目录中有文件发生写入并关闭时,`pyinotify` 会调用这个方法。我们在这个方法中使用正则表达式匹配文件名,如果文件名符合要求,就获取文件的路径和大小,然后输出到控制台。
在 `watch_dir` 函数中,我们创建了一个 `WatchManager` 对象和一个 `Notifier` 对象,并将它们绑定在一起。然后调用 `WatchManager` 对象的 `add_watch` 方法来添加要监视的目录和文件类型。最后调用 `Notifier` 对象的 `loop` 方法开始循环监视目录。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![xlsx](https://img-home.csdnimg.cn/images/20210720083732.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)