Macのデスクトップ通知をPythonから表示する


Macの通知をPythonスクリプトから出したい局面があったので、

  • AppleScriptをコマンドで実行する
  • 上記のコマンドをPythonから実行する

という流れで作成しました。

AppleScriptでデスクトップ通知を表示する

AppleScriptでは、

notification.scpt
display notification "こんにちは世界"

でデスクトップ通知を表示できます。下図では、ScriptEditor.appから実行しています。

コマンドからAppleScriptを実行する

osascriptコマンドを使用します。

terminal.appにて、

$ osascript -e 'display notification "こんにちは世界"'

で、先程と同じ結果が得られます。

Pythonスクリプト内でコマンドを呼び出す

osモジュールのsystemメソッドの引数に、前述のコマンドを文字列として渡すことで実行できます。

notification.py
import os

os.system("osascript -e 'display notification \"こんにちは世界\"'")

実行環境がMacのときだけ上記の処理を実行したい

PythonスクリプトがMac以外の環境でも実行される可能性がある場合、デスクトップ通知の表示は環境によっては行わないようにする必要が出てきます。

Pythonの標準ライブラリにplatformというモジュールがあるので、こちらを利用しました。

platform.system()を実行すると、システムの名前が'Linux', 'Darwin', 'Java', 'Windows'のような文字列で返ってきます。不明な場合は空文字が返ってきます。

まとめ

以上をまとめると次のようになりました。

notification_matome.py
import os
from platform import system

pf = system()
if pf == "Darwin":
    os.system("osascript -e 'display notification \"こんにちは世界\"'")

今後の展望

通知が「スクリプトエディタ」発になっているので、できれば変更したい。

環境

  • macOS 10.15.6
  • zsh 5.7.1 (x86_64-apple-darwin19.0)
  • Python 3.8.0

Reference

pythonからmacOSの通知センターを操る方法 - アウトプットして苦悩する

platform --- 実行中プラットフォームの固有情報を参照する — Python 3.8.5 ドキュメント