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