個人的なまとめ。

てきとーに何か書きます。

[追記] ファイル更新監視用ライブラリについてのメモ

ファイル変更監視用のライブラリについてのメモ

watchdog(watchmedo)は,ローカルのファイルの変更を検知するには十分
しかし,NFSへの対応はしていないような気がする.
ただ,これはログが非常に見やすいので,わかりやすい.

表示例:

kosuke@~/Desktop : watchmedo log --recursive --patterns "*.txt;*.png" ./
on_created(self=<watchdog.tricks.LoggerTrick object at 0x7f424aaea208>, event=<FileCreatedEvent: src_path='./test.txt'>)
on_modified(self=<watchdog.tricks.LoggerTrick object at 0x7f424aaea208>, event=<FileModifiedEvent: src_path='./test.txt'>)


pyinotifyは,ファイルの変更だけではなく,ターミナル上でcd /Desktopとかした時のコマンドでさえも検知してくれる.
しかし,1つのファイルを作成した場合だと,それだけで30行ぐらいのログが出てくるのが難点.
ログに関しても,今回作成したファイルだけではなく,既にそのディレクトリにあるファイルまでも表示をしているようで,非常に見づらい.
また,これもNFSに対応していない.
表示例:

kosuke@~/Desktop : python3 -m pyinotify -v ~/Desktop/
[2017-12-27 02:39:12,829 pyinotify DEBUG] Event queue size: 128
[2017-12-27 02:39:12,829 pyinotify DEBUG] <_RawEvent cookie=0 mask=0x100 name=test.txt wd=1 >
[2017-12-27 02:39:12,830 pyinotify DEBUG] <_RawEvent cookie=0 mask=0x20 name=test.txt wd=1 >
[2017-12-27 02:39:12,830 pyinotify DEBUG] <_RawEvent cookie=0 mask=0x4 name=test.txt wd=1 >
[2017-12-27 02:39:12,830 pyinotify DEBUG] <_RawEvent cookie=0 mask=0x8 name=test.txt wd=1 >
<Event dir=False mask=0x100 maskname=IN_CREATE name=test.txt path=/home/kosuke/Desktop pathname=/home/kosuke/Desktop/test.txt wd=1 >
<Event dir=False mask=0x20 maskname=IN_OPEN name=test.txt path=/home/kosuke/Desktop pathname=/home/kosuke/Desktop/test.txt wd=1 >
<Event dir=False mask=0x4 maskname=IN_ATTRIB name=test.txt path=/home/kosuke/Desktop pathname=/home/kosuke/Desktop/test.txt wd=1 >
<Event dir=False mask=0x8 maskname=IN_CLOSE_WRITE name=test.txt path=/home/kosuke/Desktop pathname=/home/kosuke/Desktop/test.txt wd=1 >


MacFSEventsの場合は,gitを見ると,build failingとなっていたので試していない.


他に,ファイル更新監視用ライブラリがあれば試して追加する.


 ----追記--- 2018/02/19 ----
PythonNFSのファイル変更を検知するには,

import os
import time

PATH = '/mnt/nfs/AAA'

while True:
    if os.path.exists(PATH):
        break
    time.sleep(5)

と,してやればいいです.

/mnt/nfs内にAAAというファイルが作成されるまで,5秒ごとにファイルのチェックを行っています.
もし,ファイルが検知されたらbreakする,という流れです.