❖RasPiでホルダのファイル内容を変更することによって実行中のプロセスが変更できる。
❍指定ホルダのファイルの内容例えば、108 200 308 1の1を2にしたら違う処理を行う。またはプログラムのパラメータ定義の変更を行う。❍そのような場合、ファイル変更イベントハンドラープログラムとして処理を登録する。
❍Main programの実行中、任意のタイミングでファイルの書き換えを行うと違う処理が実行できる。またはプログラムのパラメータ定義が変更できる。
例: ./paramのparamファイルの4番目(DA電圧)を変えると以下が起動される。
""" Watchdog Event Handler """
from watchdog.events import FileSystemEventHandler
from watchdog.observers import Observer
import os
#
target_dir = "/home/pi/programs/work_pid/pid_solar_tst/param" #./param param=パラメータファイル場所
class ChangeHandler(FileSystemEventHandler):
def on_created(self, event):
filepath = event.src_path
filename = os.path.basename(filepath)
print('%sファイルが作成されました。' % filename)
# time.sleep(5)
def on_modified(self, event):
filepath = event.src_path
filename = os.path.basename(filepath)
# print('%Event Test=' % filename)
global prm
path = './param/'
filename = 'param.txt'
try:
f = open(path + filename, 'r')
s = f.read()
prm = s.split()
prm = [int(i) for i in prm] # s(ストリングス)を整数に変換,リスト[prm]に書き込み
# print(prm[0:4])
print('%sファイルが更新されました。' % filename)
f.close()
except KeyboardInterrupt:
pass
# time.sleep(5)
def on_deleted(self, event):
filepath = event.src_path
filename = os.path.basename(filepath)
print('%sファイルが削除されました。' % filename)
# class ChangeHandler(FileSystemEventHandler):<--このイベントハンドラー
#####################################################
event_handler = ChangeHandler()
observer = Observer()
observer.schedule(event_handler, target_dir, recursive=True)
observer.start()
#####################################################
while True:
Main program
#Main programの実効中、--/--/pid_solar_tst/paramのparam.txtの内容が書き換えられるとevent_handlerが書き換えを検知し処理が実行される。
#param.txtの内容はs(ストリングス)からint(インテジャ-)変更されリストとして読み込まれる。
例:
prm = s.split()
prm = [int(i) for i in prm] # s(ストリングス)-->リスト[prm]に書き込まれる。
print(prm[0:4])
#下記3点のファイル処理ができるが今回は2.を使用。
#1.ファイルが作成されました。
#2.ファイルが更新されました。
#3.ファイルが削除されました。
0 件のコメント:
コメントを投稿