2

在我的客厅里,我有一台 Mac Mini,我既可以用作 HTPC,也可以用作家庭自动化服务器。它用于自动化的软件是 Shion,这是一款支持 AppleScript 的免费家庭自动化应用程序。在同一台 Mac Mini 上,我正在运行 Apache,并构建了一个接口,我可以通过该接口发送命令。(值得一提的是,该界面是使用 jQuery Mobile 构建的。)

我遇到的问题是在终端和 AppleScript 编辑器中运行良好的 AppleScript 在 Apache 错误日志中引发解析错误。由于终端和 AppleScript 编辑器成功运行脚本,我猜我编写 PHP 的方式是问题所在。但是当我检查错误日志时,它实际上是一个 AppleScript 错误。

AppleScript 命令非常简单:

tell application "Shion"
    execute snapshot "Evening Lighting"
end tell

或者更简单:

tell application "Shion" to execute snapshot "Evening Lighting"

这是我开始使用的原始命令,因为我不确定如何使用 -e 标志将 AppleScript 分成多行。当我将它粘贴到 AppleScript 编辑器或终端中时,它会毫无问题地执行。但是在 PHP 中运行它是行不通的:

$cmd = "osascript -e 'tell application \"Shion\" to execute snapshot \"Evening Lighting\"'";
exec($cmd);

在日志文件中,脚本返回的错误是“ A [sic] identifier can't go after this identifier ”。这是多个人遇到的 AppleScript 错误,但我找不到任何一致的解决方案。我发现的一条线索是尝试将“使用应用程序“Shion”中的术语”添加到脚本的开头,使其看起来像这样:

using terms from application "Shion"
    tell application "Shion"
        execute snapshot "Evening Lighting"
    end tell
end using terms from

我必须弄清楚如何使用 osascript 将 AppleScript 分成多行,这可以使用 -e 标志来完成。如果我将其作为常规 osascript 命令运行,它看起来像这样:

osascript -e 'using terms from application "Shion"' -e 'tell application "Shion"' -e 'execute snapshot "Evening Lighting"' -e 'end tell' -e 'end using terms from'

再一次,它在终端以及 AppleScript 编辑器中运行没有问题。但是现在我的日志中出现了一个不同的错误:“预期的行尾,但找到了标识符”。

4

2 回答 2

0

使用单引号对我有用,至少对于交互式 php:

$cmd = 'osascript -e \'tell application "Shion" to execute snapshot "Evening Lightning"\''
于 2012-11-17T09:26:41.970 回答
0

我不认为 PHP 语法是问题所在。我的 Mac 上没有安装 Shion,这是我在 Finder 与 PHP 中看到的:

$ osascript -e 'tell application "Finder" to activate'
[Finder pops to foreground]
$ osascript -e 'tell application "Shion" to execute snapshot "Evening Lightning"'
28:44: syntax error: A identifier can’t go after this identifier. (-2740)
$ php -a
Interactive shell

php > exec("osascript -e 'tell application \"Finder\" to activate'");
[Finder pops to foreground]
php > exec("osascript -e 'tell application \"Shion\" to execute snapshot \"EveningLighting\"'");
28:44: syntax error: A identifier can’t go after this identifier. (-2740)

请注意,我在 shell 和 PHP 中都遇到了同样的错误,但 Finder 事件在两者中都有效。我怀疑问题在于 PHP 脚本运行的上下文:它在 apache 进程下运行,而不是在用户会话中,因此无法“看到” Shion 应用程序。

不幸的是,如果我是对的,我不知道如何让它发挥作用。

于 2012-11-17T02:52:55.960 回答