2

特定のファイルが変更されるたびにpythonスクリプトを開始しようとしています。正確に言うと、Raspberry Pi のシリアル ポートに、データをテキスト ファイル ( test.txt ) に書き込むデバイスがあります。Watchdog / Pyinotifyの両方のツールを試しました。ファイルが変更されるたびに (トリガー イベント Watchdog: on_modified/ Pyinotify: IN_MODIFY)、重複トリガーが作成されます。IN_CLOSE_WRITE一部の人が示唆しているように、他のすべての方法を試しましたが、これはまったく機能しません。1 回のファイル更新で 1 つのイベントだけをトリガーするにはどうすればよいですか?

Pyinotify を使用した私のコード (少し編集されたチュートリアル ファイル):

import pyinotify,subprocess
def onChange(ev):
    cmd = ['/usr/bin/env', 'python', 'doThisFile.py', ev.pathname]
    subprocess.Popen(cmd).communicate()
wm = pyinotify.WatchManager()
wm.add_watch('/home/pi/test.txt', pyinotify.IN_MODIFY, onChange)
notifier = pyinotify.Notifier(wm)
notifier.loop()

またはウォッチドッグ:

#!/usr/bin/python
import time
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
import subprocess
class MyHandler(FileSystemEventHandler):
    def on_modified(self, event):
        subprocess.call("/home/pi/doThisFile.py")
        print("Code started")
if __name__ == "__main__":
    event_handler = MyHandler()
    observer = Observer()
    observer.schedule(event_handler, path='.', recursive=False)
    observer.start()
    try:
        while True:
            time.sleep(1)
    except KeyboardInterrupt:
        observer.stop()
    observer.join()
4

2 に答える 2