我經常使用Applescript來完成打開和關閉程序等基本任務,有時候會像運行特定Xcode程序的單元測試一樣深入一點。我正在學習Python,我喜歡它。我一直無法找到許多有關AppleScript與Python的文檔。我的問題是:在Mac OS X上,Python可以用來代替AppleScript來完成上述任務嗎?如果是這樣,是否有人知道有更好的資源來了解更多關於該主題的內容?在AppleScript中使用Python
回答
Python不能用於替換AppleScript提供的UI自動化職責。但是,由於OS X 10.10(優勝美地)JavaScript也可以使用。
不能真正取代它,但沒有可用於它的包裝:https://pypi.python.org/pypi/py-applescript/1.0.0 ...所以你可以用它在你的Python程序中進行交互。
另一個更清晰的選項是使用PyObjC和AppleScriptObjC橋接,允許Python直接調用AppleScript處理程序。這並不完美(例如日期和文件對象不會自動橋接,因此您需要小心一些),但它可以與Apple提供的Python一起使用;不需要安裝額外的庫。請參閱http://appscript.sourceforge.net/asoc.html以獲得快速的指導。 – foo 2015-01-22 09:35:00
使用Cocoa,您可以使用AESendMessage直接發送事件。儘管如此,還有很多工作要做。下面是它提供了一個例子的要點是:
https://gist.github.com/pudquick/9683c333e73a82379b8e377eb2e6fc41
避免一切過時和所謂的「蹩腳」模塊,包括PyObjC,可以簡單地調試腳本編輯器或腳本調試腳本(我的選擇),然後通過Popen使用osascript執行它。我更喜歡這樣,所以我可以確保應用程序實現的特性得到解決,Script Debugger具有很好的調試和瀏覽工具。
例如:
from subprocess import Popen, PIPE
def get_front_win_id():
"""
Get window id of front Chrome browser window
"""
script = '''
on run {}
set winID to 0
tell application "Google Chrome"
set winID to id of front window
return winID
end tell
end run
'''
args = []
p = Popen(['/usr/bin/osascript', '-'] + args,
stdin=PIPE, stdout=PIPE, stderr=PIPE)
stdout, stderr = p.communicate(script)
winID = stdout.strip()
return int(winID)
在列表通行證參數傳遞給osascript但它們必須是字符串,以便複雜的數據結構可以是乏味的編組和與解組但對於簡單價格。爲了簡單起見,我停止了錯誤檢查和異常處理/升級。 TANSTAAFL
雖然可以生成與AppleScript相同的Apple事件的複雜Python,但在AppleScript中可以更輕鬆地處理一些事情。
這是很容易執行一些AS在python雖然:
from Foundation import NSAppleScript
textOfMyScript = """
*(Your AppleScript Here)*
"""
myScript = NSAppleScript.initWithSource_(NSAppleScript.alloc(), textOfMyScript)
results, err = myScript.executeAndReturnError_(None)
的結果是一個NSAppleEventDescriptor,如果你需要得到的數據出來。
- 1. 無法在applescript中使用新的applescript
- 2. 從Applescript調用Python腳本
- 3. 如何在Applescript中運行python腳本?
- 4. 使用AppleScript
- 5. 使用AppleScript
- 6. 使用AppleScript
- 7. 使用AppleScript
- 8. 使用AppleScript
- 9. 使用AppleScript
- 10. 使用AppleScript
- 11. 使用AppleScript
- 12. 使用AppleScript
- 13. 使用AppleScript
- 14. 使用AppleScript
- 15. 使用AppleScript在Safari中選擇文件
- 16. 使用AppleScript在Numbers中設置邊框?
- 17. 在Safari中使用Applescript訪問Web Inspector
- 18. 如何在AppleScript中使用變量?
- 19. 使用Applescript在Photoshop中打開文件
- 20. 在Automator中使用AppleScript替換字符
- 21. 使用AppleScript在Xcode中選擇文件
- 22. 在Finder中移動文件使用AppleScript
- 23. 在POSIX路徑中使用變量applescript
- 24. 使用AppleScript在終端中運行emacs
- 25. 如何使用AppleScript
- 26. 嘗試使用AppleScript
- 27. 使用pngquant和AppleScript
- 28. 創建使用AppleScript
- 29. 添加使用AppleScript
- 30. 使用AppleScript打字
在python中使用AE模塊將像AppleScript一樣完全控制應用程序。所以是的,它可以完全取代AppleScript,包括UI和自動化。在這裏,語法變得更像是JavaScript的更多內容:https://docs.python.org/2/library/macosa.html – 2015-01-21 22:26:22
Python 2.x中的AE模塊已經癱瘓,糟糕透頂並且破損不堪。不要浪費你的時間(Python 3完全拋棄它們)。 Python-appscript橋樑與AppleScript本身相比有99%的優勢,但蘋果的Carbon on War戰略實際上是遺留下來的,我不再爲它提供支持。 OS X的Scripting Bridge框架可以通過PyObjC訪問,但它也很糟糕,也很糟糕;它可能適用於瑣碎的任務,但對於任何不平凡的AppleScript腳本來說都是如此。噢,自動化的JavaScript功能已經癱瘓了,而且它的通用庫支持與Python相比沒有任何意義。 – foo 2015-01-22 09:26:27