2011-03-09 125 views
2

我收到的時候我AppleScript的運行和屏保開啓和鎖定屏幕的的AppleEvent超時錯誤。 applescript完成當前的操作,當試圖執行下一個Finder操作時,它不會繼續,而是等待並超時。AppleScript的超時,當屏幕被鎖定

我不能增加超時時間限制,因爲我不會解鎖屏幕都沒有。有沒有辦法忽略等待屏幕解鎖或其他解決方案?

在此先感謝。

+0

最好的答案我已經收到(從macscripter.net)是使用shell命令,而不是搜索命令,以避免這種超時) – Pradeep 2011-03-30 22:04:01

回答

1

我收到(從macscripter.net)最好的答案是使用shell命令,而不是搜索命令,以避免這種超時。

0

我不知道,所以你的代碼繼續工作,你如何能繞過鎖定的屏幕,但是你可以用一個if語句,這樣當屏幕保護程序運行則不會執行你的代碼。這至少可以防止超時錯誤。例如,假設你想出於某種原因運行一個重複循環10次,並且在屏幕保護程序運行時你不想運行一些代碼......你可以這樣做。

set i to 0 
repeat 
    set screenSaverEngineIsRunning to false 

    tell application "System Events" 
     if (exists process "ScreenSaverEngine") then set screenSaverEngineIsRunning to true 
    end tell 

    if not screenSaverEngineIsRunning then 
     set i to i + 1 
     -- do some code here 
    end if 

    delay 1 
    if i is 10 then exit repeat 
end repeat 
+0

我想要的代碼來運行,即使屏幕保護程序正在運行。 – Pradeep 2011-03-15 15:31:05

0

我只是做了使用Python + Appscript做我的腳本,而不是AppleScript的測試,並持續不麻煩我的系統上運行任何用戶已被暫停時(即進入登錄窗口但用戶仍然登錄)或屏幕保存正在運行。這是一個簡單的腳本,但可以證明你需要做什麼。

Appscript帶有ASTranslate它轉換的AppleScript調用到相當於Python的+ Appscript電話。它不處理變量,但通常你可以做一些切割和粘貼來弄清楚如何轉換你的腳本。它的速度非常快,Python是一種非常優秀的語言,可以比Applescript更好地編寫腳本。

#!/usr/bin/python 

import sys, os 
from appscript import * 
import time 


def gettodos(): 
    cs = app(u'iCal').calendars.get() 
    for c in cs: 
     print c.name() 
     tds = c.todos() 
     for t in tds: 
      print " ", t.summary() 

def test(): 
    for i in range(1,1000): 
     print 
     print "Run # " + str(i) 
     print 
     gettodos() 
     time.sleep(10) 



if __name__ == '__main__': 
    test() 

    # change to 0 for success, 1 for (partial) failure 
    sys.exit(0) 
0

我無法重現您的問題。我試過下面的腳本,即使在屏幕保護程序運行時也能正常工作。

delay 10 
tell application "Finder" 
    name of startup disk 
end tell 
delay 5 
tell application "Finder" 
    contents of startup disk 
end tell 

問題必須取決於腳本執行的特定命令。他們是什麼?

+0

這就是我的代碼的樣子:

 tell application "Finder" \t duplicate (some_file as string) to (some_folder as string) with replacing \t delete some_file end tell 
第一個重複命令有效。但是刪除命令不起作用。它等待屏幕解鎖。 – Pradeep 2011-03-30 22:01:18

+0

我收到的最好答案(來自macscripter.net)是使用shell命令而不是Finder命令來避免此超時 – Pradeep 2011-03-30 22:16:02

+0

也許它試圖顯示確認或授權對話框。 Shell命令不會那樣做,是的。但請記住,當Finder的「刪除」將項目移動到垃圾箱時,「rm」命令會立即刪除它們而不會追索。 – LaC 2011-03-31 09:15:20