2016-01-28 2 views
0

Мне нужна помощь в возможности сделать вызов my_custom_function при изменении файла. Я также хочу иметь состояние файла, например file_change, file_delete и т. Д. Я использовал watchdog, который поддерживает предопределенные функции в качестве первых параметров для schedule(). Я должен быть в состоянии сделать пользовательский вызов и выполнить некоторые операции над ним. Моим вариантом использования является получение содержимого файла перед изменением файла и после изменения файла с помощью сторожевого таймера.Как вызвать пользовательскую функцию вместе с событием при изменении файла?

import sys 
import time 
import logging 
from watchdog.observers import Observer 
import os 

def my_custom_function(): 
    print "---" 

if __name__ == "__main__": 
    logging.basicConfig(level=logging.INFO, 
         format='%(asctime)s - %(message)s', 
         datefmt='%Y-%m-%d %H:%M:%S') 
    path = os.path.abspath(".") 
    my_event = my_custom_function() 
    observer = Observer() 
    observer.schedule(my_event, path, recursive=True) 
    observer.start() 
    try: 
     while True: 
      time.sleep(1) 
    except KeyboardInterrupt: 
     observer.stop() 
    observer.join() 
+0

Что ваш вопрос? Каким образом вышеуказанный код не ведет себя так, как вы ожидаете? – larsks

+0

Этот код помогает наблюдать событие изменения файла в папке, используя расписание(). Как это следует использовать для создания пользовательского вызова функции или есть способ сделать такие звонки или нет, это мой вопрос. Так просто, как ... –

ответ

1

Надеемся, что приведенный ниже код ответит на ваш вопрос.

import sys 
import time 
import watchdog 
from watchdog.observers import Observer 
from watchdog.events import PatternMatchingEventHandler 
import time 
from threading import Thread 

class MyHandler(PatternMatchingEventHandler): 

    def process(self, event): 
     print "I am being processed" 

    def on_modified(self, event): 
     print "file modified " + event.src_path 
     self.process(event) 

    def on_created(self, event): 
     print "file created" + event.src_path 
     self.process(event) 

    def on_moved(self, event): 
     print "file moved" + event.src_path 
     self.process(event) 

    def on_deleted(self, event): 
     print "file deleted" + event.src_path 
     self.process(event) 

if __name__ == '__main__': 
    args = sys.argv[1:] 
    observer = Observer() 
    observer.schedule(MyHandler(), path=args[0] if args else '.') 
    print "Start" 
    observer.start() 

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

    observer.join() 

Для получения дополнительной информации http://pythonhosted.org/watchdog/api.html

+0

это то, что я хотел .. спасибо romil и siha. Интересно, почему люди с хорошей репутацией не могут понять вещи. Это не место для блабберов. –