旅行好きなソフトエンジニアの備忘録

プログラミングや技術関連のメモを始めました

【Python】 PythonでC#のFileSystemWatcher相当のクラスを作成する

C#側がファイルを作成し、それをトリガとしてpythonが起動するようにしたいと思っています。そのため、C#のFileSystemWatcherに相当するようなクラスが欲しいと思ったのですが、以下のサイトに書かれていました。 qiita.com

import time
from watchdog.observers import Observer
from watchdog.events import PatternMatchingEventHandler

class MyFileEventHandler(PatternMatchingEventHandler):
    def __init__(self, patterns):
        super(MyHandler, self).__init__(patterns=patterns)

    def on_moved(self, event):
        # ファイルが移動した時に実行されるメソッド
        print('file moved')

    def on_created(self, event):
        # ファイルが作成された時に実行されるメソッド
        print('file created')

    def on_deleted(self, event):
        # ファイルが削除された時に実行されるメソッド
        print('file deleted')

    def on_modified(self, event):
        # ファイルが更新された時に実行されるメソッド
        print('file modified')

# MyFileEventHandlerの使い方例
if __name__ == '__main__':
    # イベントを発生させるファイルパターン
    file_pattern_to_watch = '*.txt'
    # MyFileEventHandlerを生成して
    event_handler = MyFileEventHandler(file_pattern_to_watch)
    # Observerに登録する
    file_system_watcher = Observer()
    file_system_watcher.schedule(event_handler, directory_to_watch, recursive=False)
    # 監視を開始
    file_system_watcher.start()
    # 指定時間待つ
    time_out_sec = 30
    file_system_watcher.join(time_out_sec)
    # タイムアウトが起きたかどうか調べる
    if file_system_watcher.isAlive():
        # メモ:実際にタイムアウトが起きたらkillするしかない?
        print('timeout happened')