我经常使用Applescript来完成打开和关闭程序等基本任务,有时会像运行特定Xcode程序的单元测试一样深入一些。我正在学习Python,我喜欢它。我还没有找到很多关于AppleScript与Python相关的文档。我的问题是:在Mac OS X上,可以使用Python代替AppleScript来完成上述任务吗?如果是这样,有没有人知道有关该主题的更多信息?
答案 0 :(得分:3)
Python无法用于替换UI& AppleScript提供的自动化职责。但是,由于OS X 10.10(优胜美地)JavaScript也可以使用。
答案 1 :(得分:3)
为了避免包括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)
将列表中的args传递给osascript,但它们必须是字符串,因此复杂的数据结构对于编组和解组可能是单调乏味的,但是简单的代价是有代价的。为简单起见,我省略了错误检查和异常处理/提升。 TANSTAAFL
答案 2 :(得分:1)
无法真正替换它,但有一个可用的包装器:https://pypi.python.org/pypi/py-applescript/1.0.0 ...所以你可以在你的python程序中与它进行交互。
答案 3 :(得分:1)
使用Cocoa,您可以使用AESendMessage直接发送事件。虽然这是一项更多的工作。这是一个提供示例的要点:
https://gist.github.com/pudquick/9683c333e73a82379b8e377eb2e6fc41
答案 4 :(得分:1)
虽然您可以生成复杂的python,它调用与AppleScript相同的Apple事件,但在AppleScript中可以更轻松地处理某些事情。
在python中执行一些AS很容易:
from Foundation import NSAppleScript
textOfMyScript = """
*(Your AppleScript Here)*
"""
myScript = NSAppleScript.initWithSource_(NSAppleScript.alloc(), textOfMyScript)
results, err = myScript.executeAndReturnError_(None)
如果您需要获取数据,结果是NSAppleEventDescriptor。