Python
機械学習
Line
LineNotify

Pythonの実行終了をLINEで通知する

背景

初めまして。橋詰と申します。
機械学習の勉強を近頃始めたのですが、LSTMとか組んじゃうと待ち時間長いですね。
待ってる間に次のモデルを書いてみたりソシャゲやったり寝てみたりと…
ただ、終わったかな?と逐一コマンドラインを確認するのに飽きました。
スマホにLINEでPythonの実行終了を通知してもらおうと思います。

明日の朝には終わってるだろうと思って実行だけ押して寝てみると、入力ファイルのパスが間違ってて3行目で実行が止まってたなんてことが先日ありました。GPUが欲しい。

方法

・LINEのアカウントを作る(既存のもので良い)
・LINE Notifyを友達登録
・通知用のPythonを書く

やることはそんなありません。
わざわざこの記事に来る人はLINEアカウントを持ってると思うのでLINE Notifyについてから書きます。

LINE Notifyとは

Webサービスからの通知をLINEで受信
Webサービスと連携すると、LINEが提供する公式アカウント"LINE Notify"から通知が届きます。
複数のサービスと連携でき、グループでも通知を受信することが可能です。

出典:https://notify-bot.line.me/ja/

要するにプログラムでLINEに通知だせるサービスです、と書いてあります。
かなり丁寧に作られていると感じました。ぜひドキュメントも読んでみてください。
既に色々と紐ついてるサービスもありますが、今回はtokenを発行して使います。

LINE Notifyでやること

まずはLINE Notifyをスマホで友達登録。

LINE Notify : https://notify-bot.line.me/ja/
上記のサイトに行き、右上からログインします。
ログインしたらマイページへ。
アクセストークンの発行(開発者向け)の下にあるトークンの発行をクリック。
[1:1でLINE Notifyから通知を受け取る] を選択します。
トークンが発行されたらその画面で一度ストップさせてください。
消してしまった場合は同様の手順で再発行になります。一度しか表示されません。

コード

Python3でしか実行を確認していません。
大体は「PythonからLINE NotifyでLINEにメッセージを送る」と同じです。

 発行したトークン と書かれたところを、さきほどのLINE Notifyの画面に表示されているトークンに置き換えてください。

notify.py
import requests
import sys

def main():
    url = "https://notify-api.line.me/api/notify"
    token = '発行したトークン'
    headers = {"Authorization" : "Bearer "+ token}

    args = sys.argv
    if args[0] == 1:
        message =  '通常終了'
    else :
        message = '異常終了'
    payload = {"message" :  message}
    files = {"imageFile": open("end.jpg", "rb")}

    r = requests.post(url ,headers = headers ,params=payload, files=files)

if __name__ == '__main__':
    main()

notify.pyという名前で保存しておきます。
コマンドライン引数で1と入力されたときに、通常終了、それ以外は異常終了とメッセージを送るものです。
end.jpgという名前で適当な画像を保存して同一ディレクトリにおけば一緒に送られてきます。
可愛い鳥の画像とかどうでしょう。

使い方

コマンドラインで実行する際、以下のようにして動かしてください。

python [実行するPythonファイル] && python notify.py 1 || python  notify.py

やってることの割に記事が無駄に長くなりました。
もっと簡潔に書けると思います。コメントの方で是非。

参考

PythonからLINE NotifyでLINEにメッセージを送る - Qiita