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