哪些Python模块,库可用于OSX Automation?

时间:2017-09-30 14:15:52

标签: python macos python-3.x automation automated-tests

我正在寻找OSX自动化的任何模块,例如通过Python打开任何应用程序并通过Python等控制鼠标,键盘。我尝试使用AppleScript但我想知道我是否可以访问鼠标,键盘并且可以使用OSX自动执行任何应用程序蟒蛇?我发现categorical_crossentropy,如果还有其他优秀的Python库,OSX自动化模块请告诉我。

1 个答案:

答案 0 :(得分:1)

我也在寻找一个好的python模块来使用' applescript'在python中。事实上,这就是我到达这里的方式。我无法找到任何东西,所以我不得不提出自己的解决方案。

对我来说很有用的是使用子进程模块在我的python程序中调用osascript。

更确切地说,(请参阅下面的代码示例),如果我想在我的日历中添加一些内容,我会生成在我的python程序中将其作为字符串执行的applescript,然后将其传递给osascript。

这不是超级优雅,可能也不是超级快,但效果很好。所以,我目前正在编写一个日历模块,它具有python函数,用于添加事件,获取事件列表....每个都生成applescript作为字符串并调用osascript。

这听起来很糟糕,但效果很好,一旦你有一个喜欢的程序模块,你就不用再担心苹果了。

需要一种方法在AppleScript中编码返回数据,然后在python程序中对其进行解码。至于我,大多数传入和传出AppleScript的数据都是字典式的,到目前为止,使用re模块并不是一个问题。

这是一个获取日历的生日的例子"生日"。

我的方法的主要问题是我需要为在AppleScript中访问的所有内容编写包装函数。一个令人厌倦的过程。

我看到的主要优点是a)它有效,我得到了我想要的地方,b)它似乎是未来的证据。因为,如果苹果在某些时候丢弃了applecript而支持javascript或其他任何东西,那么一旦我改编了包装模块,我的所有程序仍然可以工作。

无论如何......

希望有所帮助。

顺便说一下,如果有人知道更好的方式让我知道。或者,如果有人不知道更好的方法,但喜欢我的方法,并且有兴趣帮助编写包装模块,请告诉我。

以下是示例。

最佳, 斯蒂芬

import subprocess

def asrun(ascript):
  "Run the AppleScript ascript and return the standard output and error."
  return subprocess.run(['osascript'],
                         input=ascript,
                         stdout=subprocess.PIPE,
                         stderr=subprocess.PIPE,
                         encoding="utf-8")


def get_uid_of_calendar(name):
    script = '''\
    tell application "Calendar"
         return uid of calendar "'''+name+'''"
    end tell
    '''
    cal_res = asrun(script)
    return cal_res.stdout

get_uid_of_calendar("Birthdays")