Slide 1

Slide 1 text

【ポエム】 PythonのWatchdogを調べてみた @Saito5656 2023. 8. 13 Unagi.py 勉強会56枚目

Slide 2

Slide 2 text

自己紹介 @Saito 5656 ・自動車部品メーカーにわか情シス生技部門 ・ Unagi.pyとJAWS-UG浜松でローカルに活動 ・元々が情報技術者ではナイので想定外の(略 4月にリリース‼ 今の説明で 分かったかな? 完全に理解したョ‼ (理解してない)

Slide 3

Slide 3 text

やりたかったこと とある分析装置 (Win PCには専用ソフトで csvを吸い上げられる) 分析終了時に生成するファイルを自動転送したい

Slide 4

Slide 4 text

OSとWatchdogでイベント検知(できるはず

Slide 5

Slide 5 text

今日は中身の話はしませんが これを分析装置に挿してA〇Sにデータ自動転送

Slide 6

Slide 6 text

しかし… os.listdirでは検知できる observerは組み込みの出力を検知できなかった

Slide 7

Slide 7 text

どうして…

Slide 8

Slide 8 text

Watchdogは何をしているか “Observerスレッドはディレクトリの監視をスケジュールしてイベント ハンドラーへの呼び出しをディスパッチする”

Slide 9

Slide 9 text

さらに__init__.pyを見てみると… else? PollingObserver?

Slide 10

Slide 10 text

読み飛ばしたところにこんな説明が “Others”ではなく”Any”と書いてあるんですが…

Slide 11

Slide 11 text

polling.pyものぞいてみる 使ってるのはos.scandir

Slide 12

Slide 12 text

PollingObserverも使っているのはos.scandir

Slide 13

Slide 13 text

os.pyものぞいてみる os.walk…

Slide 14

Slide 14 text

ここで白旗上げました os.walk… sys.audit()は直接確認できない

Slide 15

Slide 15 text

公式Docよりsys.audit() sys.audit() は、イベント名と引数を渡して既存の監査フックを呼び出 し、フックから最初の例外を再発生させます。 一般に、例外が発生し た場合は処理せず、プロセスをできるだけ早く終了する必要がありま す。 これにより、フック実装は特定のイベントに応答する方法を決定 できます。単にイベントをログに記録することも、例外を発生させて 操作を中止することもできます。フックは、sys.addaudithook() 関数ま たは PySys_AddAuditHook() 関数を使用して追加されます。この関数と ネイティブで同等の関数は PySys_Audit() です。 可能な場合は、ネイ ティブ関数を使用することをお勧めします。CPython によって発生す るすべてのイベントについては、監査イベントの表を参照してくださ い。 この監査イベントとしてヒットしなかったのか?

Slide 16

Slide 16 text

よく分からなかったので最後に①

Slide 17

Slide 17 text

よく分からなかったので最後に②

Slide 18

Slide 18 text

よく分からなかったので最後に③

Slide 19

Slide 19 text

まとめ(られませんでした) 結局書き込む側がOSもってないとダメってこと? 自分の理解の範囲で原因に辿り着けませんでした 組み込みガチ勢みなさんのご教示頂けると幸いです

Slide 20

Slide 20 text

ご清聴ありがとうございました