2012-11-17 91 views
2

在我的客廳裏,我有一臺Mac Mini I作爲HTPC以及家庭自動化服務器。它用於自動化的軟件是Shion,這是一款AppleScript支持的免費家庭自動化應用程序。在同一臺Mac Mini上,我運行的是Apache,並且已經構建了一個可以發送命令的界面。 (關於它的價值,界面是使用jQuery Mobile構建的)。PHP執行與終端不同的osascript?

我遇到的麻煩是在終端和AppleScript編輯器中工作正常的AppleScripts在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 [原文]標識符不能這個標識符後去」。這是多人遇到的AppleScript錯誤,但我找不到任何一致的解決方案。一個迂迴,我發現是嘗試添加「利用申請‘紫苑’術語」到腳本的開頭,所以它看起來像這樣:

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

我必須弄清楚如何破解一個AppleScript用osascript分成多行,這可以使用-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編輯器。但現在我在日誌中收到了一個不同的錯誤:「預計行結束,但找到標識符」。

+0

試試這個語法:osascript -e 「告訴應用程序\」 史昂\ 「」 -E 「結尾說」(與「和\ 「 和不 ' ) ? – 2012-11-17 14:18:20

回答

0

我不認爲PHP語法是問題。我沒有我的Mac上安裝史昂,這裏就是我在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) 

請注意,我讓你在這兩個外殼和PHP做同樣的錯誤,但在Finder事件在兩者都有效。我懷疑問題是PHP腳本運行的上下文:它運行在apache進程下,而不是在用戶會話中運行,因此無法「看見」Shion應用程序。

不幸的是,如果我對此有所瞭解,我不知道如何讓它工作。

0

使用單引號工作對我來說,至少在互動PHP:

$cmd = 'osascript -e \'tell application "Shion" to execute snapshot "Evening Lightning"\''