Skip to content

macOS でシェルスクリプトや Python から通知を表示する

macOS ではシェル上から「OS の通知機能」を利用するには外部ツールである terminal-notifier を利用することが出来ます。 macOS 標準機能だけで実現したい場合は Apple Script から display notificationを使うことでシェル上から「OS の通知機能」を利用することが出来ます。

検証環境

対象 バージョン
macOS 14.5
Python 3.11.10

シェル上から OS 通知機能でメッセージを表示する

シェル上から OS の通知機能を利用するには osascript を使って display notification を呼び出します。

osascript -e 'display notification "Hello, World!" with title "Greeting"'

file

シェル上から OS 通知機能で音とメッセージを表示する

OS の通知機能でメッセージを表示する際、同時に音を鳴らすことも可能です。 音は /System/Library/Sounds/ に保存されているファイルから選択出来るようです。 私の環境では以下のようになっていました。

$ ls /System/Library/Sounds/
Basso.aiff     Glass.aiff     Purr.aiff
Blow.aiff      Hero.aiff      Sosumi.aiff
Bottle.aiff    Morse.aiff     Submarine.aiff
Frog.aiff      Ping.aiff      Tink.aiff
Funk.aiff      Pop.aiff

音を鳴らすには以下のように sound name を指定します。 引数は必須ですが、「存在しないサウンドファイル名」を指定した場合は、OS 標準の音が鳴るようです。

osascript -e 'display notification "Hello, World!" with title "Greeting" sound name "Basso"'

Python から macOS の OS 通知機能を利用する

Python から macOS の OS 通知機能を利用するサンプルは以下の通りです。 OS を判定し Darwin (macOS) であれば os.system()osascript を呼び出すようにしています。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
#!/usr/bin/env python3

import os
from platform import system


def notify(title: str, message: str):
    if system() == "Darwin":
        os.system(
            f'osascript -e \'display notification "{message}" with title "{title}"\''
        )


notify(title="Hello", message="World")

参考

osascript のヘルプ表示

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
OSASCRIPT(1)                                  General Commands Manual                                 OSASCRIPT(1)

NAME
     osascript – execute OSA scripts (AppleScript, JavaScript, etc.)

SYNOPSIS
     osascript [-l language] [-i] [-s flags] [-e statement | programfile] [argument ...]

DESCRIPTION
     osascript executes the given OSA script, which may be plain text or a compiled script (.scpt) created by
     Script Editor or osacompile(1).  By default, osascript treats plain text as AppleScript, but you can change
     this using the -l option.  To get a list of the OSA languages installed on your system, use osalang(1).

     osascript will look for the script in one of the following three places:

     1.   Specified line by line using -e switches on the command line.

     2.   Contained in the file specified by the first filename on the command line.  This file may be plain text
          or a compiled script.

     3.   Passed in using standard input.  This works only if there are no filename arguments; to pass arguments
          to a STDIN-read script, you must explicitly specify “-” for the script name.

     Any arguments following the script will be passed as a list of strings to the direct parameter of the “run”
     handler.  For example, in AppleScript:

           a.scpt:
           on run argv
               return "hello, " & item 1 of argv & "."
           end run

           % osascript a.scpt world
           hello, world.

     The options are as follows:

     -e statement
           Enter one line of a script.  If -e is given, osascript will not look for a filename in the argument
           list.  Multiple -e options may be given to build up a multi-line script.  Because most scripts use
           characters that are special to many shell programs (for example, AppleScript uses single and double
           quote marks, “(”, “)”, and “*”), the statement will have to be correctly quoted and escaped to get it
           past the shell intact.

     -i    Interactive mode: osascript will prompt for one line at a time, and print the result, if applicable,
           after each line.  Any script supplied as a command argument using -e or programfile will be loaded, but
           not executed, before starting the interactive prompt.

     -l language
           Override the language for any plain text files.  Normally, plain text files are compiled as
           AppleScript.

     -s flags
           Modify the output style.  The flags argument is a string consisting of any of the modifier characters
           e, h, o, and s.  Multiple modifiers can be concatenated in the same string, and multiple -s options can
           be specified.  The modifiers come in exclusive pairs; if conflicting modifiers are specified, the last
           one takes precedence.  The meanings of the modifier characters are as follows:

           h  Print values in human-readable form (default).
           s  Print values in recompilable source form.

              osascript normally prints its results in human-readable form: strings do not have quotes around
              them, characters are not escaped, braces for lists and records are omitted, etc.  This is generally
              more useful, but can introduce ambiguities.  For example, the lists ‘{"foo", "bar"}’ and ‘{{"foo",
              {"bar"}}}’ would both be displayed as ‘foo, bar’.  To see the results in an unambiguous form that
              could be recompiled into the same value, use the s modifier.

           e  Print script errors to stderr (default).
           o  Print script errors to stdout.

              osascript normally prints script errors to stderr, so downstream clients only see valid results.
              When running automated tests, however, using the o modifier lets you distinguish script errors,
              which you care about matching, from other diagnostic output, which you don't.

SEE ALSO
     osacompile(1), osalang(1), AppleScript Language Guide

HISTORY
     osascript in Mac OS X 10.0 would translate ‘\r’ characters in the output to ‘\n’ and provided c and r
     modifiers for the -s option to change this.  osascript now always leaves the output alone; pipe through tr(1)
     if necessary.

     Prior to Mac OS X 10.4, osascript did not allow passing arguments to the script.

Mac OS X                                          April 24, 2014                                          Mac OS X