2013-10-14 86 views
0

我在python使用AppleScript的模塊寫入一個AppleScript功能和我無法概括如下功能:如何在同一AppleScript命令中使用多個變量?

scpt = applescript.AppleScript(''' 
    on code() 
     tell application "System Events" 
      key code 123 using command down 
     end tell 
    end code 
''') 

使得鍵碼和KEYDOWN變量可以是輸入參數,如下所示:

scpt = applescript.AppleScript(''' 
    on code(kc, extras) 
     tell application "System Events" 
      key code kc extras 
     end tell 
    end code 
''') 

,但我得到以下運行時錯誤:

Traceback (most recent call last): 
File "<stdin>", line 1, in <module> 
File "example.py", line 28, in <module> 
    ''') 
File "build/bdist.macosx-10.7-intel/egg/applescript/__init__.py", line 49, in __init__ 

applescript.ScriptError: Expected end of line but found application constant or consideration. (-2741) range=410-414 

所以我以爲有什麼東西靠不住的我句法。

我正在使用Mac 0SX 10.7.5,python 2.7.1。

編輯

此代碼是example.py名爲Python模塊中,這裏是代碼再次,正是因爲它是在模塊中:

import applescript 

scpt = applescript.AppleScript(''' 
    on code(kc, extras) 
     tell application "System Events" 
      key code kc extras 
     end tell 
    end code 
''') 

我從命令調用它行如下:

$ python 
Python 2.7.1 (r271:86832, Aug 5 2011, 03:30:24) 
[GCC 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2335.15.00)] on darwin 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import example as e 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "example.py", line 9, in <module> 
    ''') 
    File "build/bdist.macosx-10.7-intel/egg/applescript/__init__.py", line 49, in __init__ 

applescript.ScriptError: Expected end of line but found identifier. (-2741) range=90-96 

其中第9行是我的模塊的最後一行 - ''')。

+0

哪一行是28,你能告訴我你是如何調用該函數的嗎? – mcgrailm

回答

1

我的猜測是你傳遞了錯誤的變量類。我會做這樣的事情。我會告訴自己,我會一直傳遞字符串,然後讓代碼將變量轉換爲適當的類。我會這樣做,因爲很難將正確的類傳遞給系統事件,例如命令/選項/控制類型鍵。他們有自己的類,只有系統事件可以理解。否則我不知道你會怎麼通過它們。

因此,使用所有字符串,一個簡單的if語句可以處理其餘的。還要注意我也添加了一個應用程序變量。當您發出擊鍵時,按鍵被髮送到最前面的應用程序,所以最好通過在執行擊鍵之前「激活」它來確保您想要瞄準的應用程序是最前面的應用程序。

這裏是基本的AppleScript代碼...

on code(appName, theNum, theModifier) 
    tell application appName to activate 
    delay 0.2 

    set theNum to theNum as number 
    tell application "System Events" 
     if theModifier is "command" then 
      key code theNum using command down 
     else if theModifier is "option" then 
      key code theNum using option down 
     else if theModifier is "control" then 
      key code theNum using control down 
     else if theModifier is "shift" then 
      key code theNum using shift down 
     end if 
    end tell 
end code 

然後,你可以用這樣的運行它(請注意,我傳遞的所有字符串)...

code("Safari", "123", "command") 
0

的py- applescript模塊提供了用於定義class(類型)和constant(枚舉器)對象的AETypeAEEnum類。沒有術語支持,所以您需要從AppleScript Editor導出應用程序的SDEF,並查找相應的四字符代碼(例如document - >b"docu"Unicode text - >b"utxt")。例如:

#!/usr/bin/python2.7 

import applescript 

# AppleScript 'constants' (four-char codes taken from 'System Events.sdef') 
command_down = applescript.AEEnum("Kcmd") 
control_down = applescript.AEEnum("Kctl") 
option_down = applescript.AEEnum("Kopt") 
shift_down = applescript.AEEnum("Ksft") 


scpt = applescript.AppleScript(''' 
    on code(kc, extras) 
     tell application "System Events" 
      key code kc using extras 
     end tell 
    end code 
''') 

scpt.call("code", 45, [command_down, option_down]) # Cmd-Opt-N 
相關問題