我经常使用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
- 2. 使用AppleScript
- 3. 使用AppleScript
- 4. 使用AppleScript
- 5. 使用AppleScript
- 6. 使用AppleScript
- 7. 使用AppleScript
- 8. 使用AppleScript
- 9. 使用AppleScript
- 10. 使用Applescript在Photoshop中打开文件
- 11. 如何在AppleScript中使用变量?
- 12. 使用AppleScript在Numbers中设置边框?
- 13. 使用AppleScript在Safari中选择文件
- 14. 在Automator中使用AppleScript替换字符
- 15. 添加使用AppleScript
- 16. 点击使用AppleScript
- 17. 无法使用AppleScript
- 18. 尝试使用AppleScript
- 19. 使用AppleScript打字
- 20. 如何从Python脚本中运行AppleScript?
- 21. 在Applescript中使用CSV写入(使用终端shell)
- 22. 在Automator中使用Applescript将图像与ImageMagick结合使用
- 23. Mac Automator/AppleScript:有没有办法在AppleScript中引用变量?
- 24. 如何在Xcode上使用AppleScript的NSEvent?
- 25. setStringValue使用AppleScript列表
- 26. 使用System.cmd运行AppleScript的
- 27. 登录到Mac使用AppleScript
- 28. 使用node.js的JavaScript的Applescript
- 29. 如何使用AppleScript外壳
- 30. 的AppleScript - 帮助使用Safari
在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