2017-09-30 41 views
-1

我正在尋找OSX自動化的任何模塊,例如通過Python打開任何應用程序,並通過Python控制鼠標,鍵盤等。我嘗試使用AppleScript,但我想知道如果我可以訪問鼠標,鍵盤並可以使用Python自動化OSX上的任何應用程序?我發現pyauto,如果有任何其他好的Python庫,OSX自動化模塊,請讓我知道。哪些Python模塊庫可用於OSX自動化?

+0

ATOMac/pyatom是唯一一個在Python至今。它僅適用於Python2.7,但足以獲取文本等。 –

回答

1

我也在尋找一個很好的python模塊來在python中使用'applescript'。其實這就是我到這裏的方式。我無法找到任何東西,所以我不得不提出自己的解決方案。

對我來說很好的方法是使用子進程模塊在我的python程序中調用osascript。

更準確地說,如果我想在我的日曆中添加一些東西,我會生成一個在我的python程序中將其作爲字符串處理的applescript,然後將其管道化爲osascript。

這不是超級優雅,可能也不是超快,但它運作良好。所以,我目前正在編寫一個日曆模塊,該模塊具有用於添加事件,獲取事件列表的python函數....並且每個函數都以字符串形式生成applescript並調用osascript。

聽起來很糟糕,但工作得很好,一旦你有你喜歡的程序模塊,你不必再擔心applescript。

需要一種方法來在蘋果腳本中編碼返回數據,然後在python程序中對其進行解碼。就我而言,大多數傳入和傳出的數據都是字典式的,到目前爲止,使用re模塊並不是一個問題。

以下是獲取日曆「生日」的uid的示例。

我的方法的主要問題是我需要爲applescript中的所有內容編寫包裝函數。一個令人厭煩的過程。

我看到的主要優點是a)它的工作原理,我得到了我想要的地方,b)它似乎是未來的證明。因爲,如果蘋果在某些時候拋棄了applescript而轉而使用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")