22

特定の名前のファイルがディレクトリに作成されたことを検出しようとしています。watchdogのおかげでやっています。作成は正しく検出されますが、検出が完了したらアプリケーションを適切に終了する方法がわかりません。

私のコードは次のとおりです。

#!/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))

私はpythonが初めてで、何が悪いのかわかりません。検出は専用スレッドでスケジュールされているようで、join() メソッドはこのスレッドが終了するのを待っています。したがって、待機/ループを停止するためにオブザーバーで正しいメソッドを呼び出していないと思いますが、ウォッチドッグのドキュメントでは、使用できるメソッドが何であるかを指摘するのは本当に明確ではないようです。

誰かが私の目標を達成する方法を知っていますか?

4

2 に答える 2

17

unschedule_all最後に、ウォッチドッグの実装を見てみると、 beforeを呼び出す必要はありませんstop。これは自動的に行われます。このメソッド呼び出しを含む行を削除すると、問題が修正され、アプリケーションは完全に実行されます。

于 2012-08-09T15:04:53.383 に答える