2012-08-09 50 views
14

Tôi đang cố gắng phát hiện khi một tệp có tên đã cho được tạo trong một thư mục. Tôi đang làm điều đó nhờ vào watchdog. Việc tạo ra được phát hiện chính xác nhưng tôi không biết làm thế nào để chấm dứt các ứng dụng đúng khi phát hiện được thực hiện.Phát hiện việc tạo tập tin với cơ quan giám sát

mảnh My mã như sau:

#!/usr/bin/env python 
# -*- coding: utf-8 -*- 

import logging 
import sys 
import time 

from watchdog.events import FileSystemEventHandler 
from watchdog.observers import Observer 

logging.basicConfig(level=logging.ERROR) 

class MyEventHandler(FileSystemEventHandler): 
    def __init__(self, observer, filename): 
     self.observer = observer 
     self.filename = filename 

    def on_created(self, event): 
     print "e=", event 
     if not event.is_directory and event.src_path.endswith(self.filename): 
      print "file created" 
      self.observer.unschedule_all() 
      self.observer.stop() 

def main(argv=None): 
    path = argv[1] 
    filename = argv[2] 

    observer = Observer() 
    event_handler = MyEventHandler(observer, filename) 

    observer.schedule(event_handler, path, recursive=False) 
    observer.start() 
    observer.join() 

    return 0 

if __name__ == "__main__": 
    sys.exit(main(sys.argv)) 

Tôi mới vào python và tôi không thể tìm ra những gì là sai. Việc phát hiện dường như được lên lịch trong một chuỗi chuyên dụng và phương thức join() đang chờ thread này chấm dứt. Vì vậy, tôi cho rằng tôi không gọi đúng phương pháp trên người quan sát để ngừng chờ đợi/looping, nhưng tài liệu watchdog có vẻ thực sự không rõ ràng để chỉ ra những phương pháp có thể được sử dụng là gì.

Có ai đó có ý tưởng làm cách nào để đạt được mục tiêu của mình không?

Trả lời

11

Cuối cùng, sau khi xem xét triển khai cơ quan giám sát, bạn không cần phải gọi unschedule_all trước stop, việc này được thực hiện tự động. Loại bỏ dòng chứa phương thức này gọi sửa lỗi sự cố và ứng dụng đang chạy hoàn hảo.

+0

Cảm ơn bạn đã đăng cập nhật này – jgyou