使用Python代替AppleScrip

2024-06-23 02:53:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我经常使用Applescript来完成一些基本的任务,比如打开和关闭程序,有时候更深入一些,比如运行一个特定Xcode程序的单元测试。我在学Python,我喜欢它。我还没有找到很多关于AppleScript和Python的文档。我的问题是:在Mac OS X上,可以用Python代替AppleScript来完成上面提到的任务吗?如果是的话,有谁知道一个很好的资源来了解这个话题吗?


Tags: 文档程序osmac资源单元测试xcode话题
3条回答

为了避免包括PyObjC在内的所有过时的所谓“糟糕”模块,您只需在脚本编辑器或脚本调试器(我的选择)中调试脚本,然后通过Popen使用osascript执行它。我更喜欢这样,这样我就可以确保应用程序实现的特性得到解决,并且脚本调试器有很好的调试和浏览工具。

例如:

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,但它们必须是字符串,因此复杂的数据结构在封送和解封时可能会很乏味,但简单性是有代价的。为了简单起见,我省略了错误检查和异常处理/引发。坦斯塔法尔

Python不能替代AppleScript提供的UI&automation职责。不过,由于OS X 10.10(Yosemite)也可以使用JavaScript。

请看这里:https://developer.apple.com/library/mac/releasenotes/InterapplicationCommunication/RN-JavaScriptForAutomation/index.html

虽然可以生成复杂的python,调用与AppleScript相同的Apple事件,但在AppleScript中处理某些事情更容易。

尽管在python中执行一些命令很容易:

from Foundation import NSAppleScript
textOfMyScript = """
   *(Your AppleScript Here)*
"""
myScript = NSAppleScript.initWithSource_(NSAppleScript.alloc(), textOfMyScript)
results, err = myScript.executeAndReturnError_(None)

结果是一个NSAppleEventDescriptor,如果你需要得到数据。

相关问题 更多 >