Reputation: 75
I am running the following code that implements WatchDog in Python to monitor file changes. I am trying to keep track of all the changes in a log file (DoNotDelete.txt), and therefore am trying to ignore this DoNotDelete.txt file within my code. However when I try to run this (first by passing an 'n' to the file and then by changing files) I get a ValueError (ValueError: conflicting patterns set(['*'])
included and excluded).
import sys
import time
import os
import logging
from watchdog.observers import Observer
from watchdog.events import PatternMatchingEventHandler
class MyHandler(PatternMatchingEventHandler):
currentEvent = ""
update = False
def on_modified(self, event):
super(MyHandler, self).on_modified(event)
what = 'Directory' if event.is_directory else 'File'
self.currentEvent = what + ", modified, " + event.src_path
if(self.update == False):
file = open("DoNotDelete.txt", "a+")
file.write(self.currentEvent + "\n")
file.close()
else:
print self.currentEvent
def on_created(self, event):
super(MyHandler, self).on_created(event)
what = 'Directory' if event.is_directory else 'File'
self.currentEvent = what + ", created, " + event.src_path
if(self.update == False):
file = open("DoNotDelete.txt", "a+")
file.write(self.currentEvent + "\n")
file.close()
else:
print self.currentEvent
def on_deleted(self, event):
super(MyHandler, self).on_deleted(event)
what = 'Directory' if event.is_directory else 'File'
self.currentEvent = what + ", deleted, " + event.src_path
if(self.update == False):
file = open("DoNotDelete.txt", "a+")
file.write(self.currentEvent + "\n")
file.close()
else:
print self.currentEvent
def on_moved(self, event):
super(MyHandler, self).on_moved(event)
what = 'Directory' if event.is_directory else 'File'
self.currentEvent = what + ", moved, from: " + event.src_path + ", to: " + \
event.dest_path
if(self.update == False):
file = open("DoNotDelete.txt", "a+")
file.write(self.currentEvent + "\n")
file.close()
else:
print self.currentEvent
def get_boolean(self, bool):
self.update = bool
if __name__ == "__main__":
booleanUpdate = False
updateOrNot = raw_input("Would you like to enable auto-update (y/n): ")
if((len(updateOrNot) == 1) and (updateOrNot.lower() == "y")):
booleanUpdate = True
event_handler = MyHandler(ignore_patterns='*.txt')
event_handler.get_boolean(booleanUpdate)
observer = Observer()
observer.schedule(event_handler, path='.', recursive=True)
observer.start()
print booleanUpdate
try:
while True:
time.sleep(1)
except KeyboardInterrupt:
observer.stop()
observer.join()
Any suggestions of how to get around this error?
Upvotes: 1
Views: 6916
Reputation: 34086
I guess you should use a list for the patterns.
class MyHandler(PatternMatchingEventHandler):
currentEvent = ""
update = False
def __init__(self):
super(MyHandler, self).__init__(ignore_patterns=["*/DoNotDelete.txt"])
def doExtractMethods(self):
if (self.update == False):
file_ = open("DoNotDelete.txt", "a+")
file_.write(self.currentEvent + "\n")
file_.close()
else:
print self.currentEvent
def on_modified(self, event):
super(MyHandler, self).on_modified(event)
what = 'Directory' if event.is_directory else 'File'
self.currentEvent = what + ", modified, " + event.src_path
self.doExtractMethods()
def on_created(self, event):
super(MyHandler, self).on_created(event)
what = 'Directory' if event.is_directory else 'File'
self.currentEvent = what + ", created, " + event.src_path
self.doExtractMethods()
def on_deleted(self, event):
super(MyHandler, self).on_deleted(event)
what = 'Directory' if event.is_directory else 'File'
self.currentEvent = what + ", deleted, " + event.src_path
self.doExtractMethods()
def on_moved(self, event):
super(MyHandler, self).on_moved(event)
what = 'Directory' if event.is_directory else 'File'
self.currentEvent = what + ", moved, from: " + event.src_path + ", to: "\
+ event.dest_path
self.doExtractMethods()
def get_boolean(self, bool):
self.update = bool
Notice ignore_patterns=["*/DoNotDelete.txt"]
See Monitoring a single file and https://github.com/gorakhargosh/watchdog/issues/99
Upvotes: 2