#本稿の投稿経緯
1年ほど、pyautoguiを利用した自動化ツールを運用した結果、FAILSAFEモードについて思うところがあったので、投稿。
#PyAutoGUIとは
マウス操作、クリック操作、キーボード操作などを自動化するpythonライブラリです。(pyautogui自体の説明は他にたくさんの記事が投稿されているので省きます)
import pyautogui as gui
gui.vscroll(-100)
gui.click(100,100)
gui.hotkey("ENTER")
[処理の内容]
モニターの左上を基準x=0,y=0として、100ピクセル分下にスクロールする。
x=100、y=100の位置をクリックする。
ENTERを押下する。
といった動きが自動で実行されます。
#FAILSAFEモードとは
pyautoguiは自動化を実現しますが、あくまできめられた操作を実行するだけであって、実際の画面上の動作との兼ね合いは、実装者側で検討しなければなりません。
たとえば、何かのexeを実行したが、exeが開くのに時間がかかってしまっている間に次の処理が実行されてしまい、予期していない箇所をクリックされ、想定とまったく違う動作のまま処理が進んでしまう、といったことが往々にしてあります。
そのような時に、緊急停止用に用意されているのがFAILSAFEモードになります。画面の左上にマウスを移動させるとFAILSAFEモードが起動し、プログラムが停止します。なお、pyautoguiでは、FAILSAFEモードはTrueにしておくのを推奨しています。
#緊急停止ON デフォルトでは、ONなので、記述しなくてもよい
gui.FAILSAFE=True
#緊急停止OFF
gui.FAILSAFE=False
じゃあTrueにしておくのがいいんじゃないのか?という考えもありますが、場合によって設定すべき項目があると、自動化ツールを運用して感じたので、その内容を記載していきます。
なお、そもそも自動化したい内容に画面の左上にマウスポインタがを移動させる必要があるというのであれば、Falseにせざるを得ないので、そういった場合を除いたケースで検討します。
#設定すべき値
###【開発~テスト期】
推奨設定:True
理由:開発・テスト時はプログラム自体が誤っており、想定外の処理をしてしまう可能性が高いので、いつでも停止できるようにTrueにしておくべきです。
###【運用期~自動化専用端末の場合~】
推奨設定:True
理由:運用期であれば、自動化動作が安定しているので、Falseでもいいのですが、マウスポインタが左上に行ってしまったということは、想定外の動作がすでに起きているので、Trueで後続の処理を停止させ、想定外動作の内容を確認するべきです。
###【運用期~自動化以外の用途でも使う端末の場合~】
推奨設定:False
理由:例えば、自作業→閉め処理(自動)といったような順番で作業をしている時、自作業の終了時にマウスポインタの位置を確認するということはしないと思います。たまたま左上にマウスポインタがあって終わってしまった場合、閉め処理(自動)が、実行時点でFAILSAFEモードが発動してしまうということが起きてしまいます。これを防ぐためにFalseにすべきです。
では、Falseの時に、予期せぬ動きが発生してしまった場合はどうするかというと、try ~ exceptで停止処理等を仕込むしかありません。まぁTrueにしていてもtry~excpet処理は、入れておくべきなので、さほど気にすることはないと思います。
#最後に
本検討は、あくまで投稿者が考える設定値なので、他にご意見があれば参考にさせて頂きたいです。