2017-09-30 6 views
-1

私は、AppleScriptを使ってみましたが、マウスやキーボードにアクセスでき、Pythonを使ってOSX上のアプリケーションを自動化できるかどうか疑問に思っていました。 ?私はpyautoを見つけました。他にも良いPythonライブラリがあれば、OSX自動化のためのモジュールを教えてください。どのPythonモジュール、ライブラリがOSX Automationで利用できますか?

+0

ATOMac/pyatomは、これまでのところ、Pythonで唯一のものです。これはPython2.7でのみ動作しますが、テキストなどを取得するのに十分です。 –

答えて

1

私もpythonの中で 'applescript'を使う良いpythonモジュールを探しています。実際これが私がここに来た方法です。私は何かを見つけることができませんでしたので、私は自分自身の解決策を考えなければなりませんでした。

私にとってうまくいくのは、サブプロセスモジュールを使って自分のpythonプログラムからosascriptを呼び出すことです。

より正確には(例のコードを参照してください)、私は自分のカレンダーに何かを追加したいのですが、私のpythonプログラムの文字列としてそれを行い、その後osascriptにパイプするアプリケーションを生成します。

これはスーパーエレガントではなく、おそらく超高速ではありませんが、うまく機能します。だから、私は現在、イベントを追加するためのPython関数を持つカレンダーモジュールを作成しています。イベントのリストを取得しています。それぞれは、AppleScriptを文字列として生成し、osascriptを呼び出します。

ひどく聞こえますが、かなりうまくいきます。好みのプログラム用のモジュールがあれば、もうAppleScriptについて心配する必要はありません。

AppleScriptでエンコードして、返すデータをPythonプログラムでデコードする方法が必要です。 AppleScriptとの間でやりとりされるほとんどのデータは辞書的なものですが、reモジュールを使ってこれまで問題になっていません。

ここでは、「誕生日」のカレンダーのUIDを取得する例を示します。

私の方法の主な問題は、私がアクセスしたいすべてのものに対してラッパー関数を書く必要があることです。面倒なプロセス。

私が見ている主な利点は、a)動作し、私が望むところに到達し、b)将来の証明であるようです。なぜなら、ある時点でリンゴがjavascriptなどに賛成してapplescriptを破棄すれば、ラッパーモジュールを適応させた後も私のプログラムはすべて動作します。

とにかく...

希望するものがあります。

ところで、誰かがもっと良い方法を知っている場合は、私に知らせてください。誰かがより良い方法を知らないが、自分のアプローチが好きで、ラッパーモジュールの作成に関心があるなら、私にも教えてください。

これは例です。

ベスト、 ステファン

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") 
関連する問題