【PYTHON+WATCH DOG】を使ったファイル更新通知GUI
設備が異常通知した時に、ユーザー側にするようなシステム作りたいなと思っていたところPYTHON と WATCH DOGでファイル監視ができるようなので、勉強がてら作ってみました。
目次
1.仕様的なやつ
仕様はこんなかんじです。
①監視したいファイル先のURLを入力
②ファイル更新されるまでは待ちの状態
③ファイル更新(Alarm.csvが更新されたらエラーとする)
※本当は、最上面にPOPUPしたかったのですが、実力不足で断念しました。
2.プログラム
がっつりまねさせてもらいました。まとめが分かりやすくて
すぐに利用できます。
ファイル監視には、WATCH DOG、そして、それらを通知するGUIは、PySimpleを利用しました。
ファイル監視
GUI(ユーザーインターフェースを作成)
from watchdog.events import PatternMatchingEventHandler from watchdog.observers import Observer import os import time import PySimpleGUI as sg import datetime alarm_on = 0 def on_modified(event): alarm_on=1 filepath = event.src_path filename = os.path.basename(filepath) print('%s が更新されました!' % filename) dt = datetime.datetime.today() if filename == 'Alarm.csv': window['-mytext-'].update('エラー発生 。゚(゚´Д`゚)゚。') window['-mytext2-'].update('%s' % dt) if __name__ == "__main__": sg.theme('DarkAmber') layout = [ [sg.Text('設備エラーファイル参照先を入力してください:')], [sg.Text(), sg.InputText('お好きなURLをデフォルトで入れてください')], [sg.Button('OK'), sg.Button('キャンセル')] ] window = sg.Window('エラーメッセンジャー', layout) while True: event, values = window.read() if event == sg.WIN_CLOSED or event == 'キャンセル': w_state = 0 break elif event == 'OK': w_state = 1 print('あなたが入力した値: ', values[0]) break DIR_WATCH = values[0] PATTERNS = ['*.csv'] window.close() sg.theme('DarkAmber') layout = [ [sg.Text('エラー情報: '), sg.Text(size=(30,1), key='-mytext-')], [sg.Text('発生時刻: '), sg.Text(size=(30,1), key='-mytext2-')], [sg.Button('終了'), sg.Button('表示リセット'), sg.Button('非表示')] ] window = sg.Window('エラーメッセンジャー', layout) if w_state == 1: event_handler = PatternMatchingEventHandler(PATTERNS) event_handler.on_modified = on_modified observer = Observer() observer.schedule(event_handler, DIR_WATCH, recursive=True) observer.start() while True: event, values = window.read() if event == sg.WIN_CLOSED or event == '終了': observer.stop() break elif event == '表示リセット': window['-mytext-'].update('') window['-mytext2-'].update('') #window.normal() elif event == '非表示': window.minimize() elif alarm_on == 1: print('%s toota' % alarm_on) alarm_on = 0 window.normal() observer.join() window.close()