5

我想在我的 Matlab 代码运行完毕后向通知中心发送通知。我在 Mountain Lion 10.8.3 上并拥有 Matlab 2012b。这可能吗?如果是这样,怎么做?

4

4 回答 4

4

这是一个完整的功能。它将 Matlab 显示为名称和图标,单击通知将带您进入 Matlab:

function notify(message)
  escaped_message = strrep(message, '"', '\"');
  [~, ~] = system(['/usr/local/bin/terminal-notifier ' ...
                   '-title Matlab ' ...
                   '-group com.mathworks.matlab ' ...
                   '-activate com.mathworks.matlab ' ...
                   '-sender com.mathworks.matlab ' ...
                   '-message "' escaped_message '"']);
end
于 2014-05-23T20:10:29.933 回答
2

terminal-notifier是“从命令行在 Mac OS X 10.8 上发送用户通知”的工具。systemMatlab 可以使用或向 Mac OS X 命令行发送命令!。把这些放在一起,你可以在你的 m 文件中写这样的东西:

!terminal-notifier.app/Contents/MacOS/terminal-notifier -message "Testing..."

为了使事情更容易,您可能希望创建自己的函数,以便可以这样调用它:

notify("Notifications from Matlab!")
于 2013-04-03T19:24:47.403 回答
2

要添加到解决方案,这里是如何通过 Matlab 的函数和从命令行执行 AppleScriptsystem的终端命令来完成的。osascript下面的函数接受一个message参数和可选titlesubtitle, 和alertsound 参数。还完成了对输入的一些粗略转义。alert声音参数可以是系统偏好设置的声音窗格的声音效果选项卡中的任何命名声音,例如'Sosumi'

function status=notify(msg,titl,subtitl,alert)
%NOTIFY  Display OS X notification message window
%   NOTIFY(MESSAGE,TITLE,SUBTITLE,SOUND)

rep = @(str)strrep(regexprep(str,'["\\]','\\$0'),'''','\"');
cmd = ['osascript -e ''display notification "' rep(msg)];
if nargin > 1 && ischar(titl)
    cmd = [cmd '" with title "' rep(titl)];
    if nargin > 2 && ischar(subtitl)
        cmd = [cmd '" subtitle "' rep(subtitl)];
        if nargin > 3 && ischar(alert) && ~isempty(alert)
            cmd = [cmd '" sound name "' rep(alert)];
        end
    end
else
    cmd = [cmd '" with title "Matlab'];
end
status = system([cmd '"''']);

您可以从我的 GitHub下载此功能的更完整版本。与基于 的解决方案不同terminal-notifier,我不相信通知菜单的图标可以更改。但是,该功能应该可以在任何 OS X 10.8 或 10.9 系统上运行,并且不需要安装/下载任何东西。此代码在 OS X 10.9.3 和 10.11.4 下进行了测试。

于 2014-05-24T02:00:44.917 回答
1

使用两个功能:

  1. 从 bash 运行 matlab
  2. say donesay error阅读更多

    matlab -nojvm -nodesktop -r "run .m" && 说完成 || 说错误

于 2013-04-03T17:00:59.830 回答