2013-04-17 19 views
13

osascriptコマンドラインユーティリティまたはappscriptを使用せずにPythonからAppleScriptコードを実行する方法はありますか(実際には使用したくないですか?)it's no longer developed/supported/recommended)?osascriptやappscriptを使わずにPythonからAppleScriptを呼び出す?

理由:another question I've just postedでは、私はosascriptでAppleScriptを実行しているときに奇妙な/望ましくない動作が発生していると説明しています。私が実際にPythonスクリプトから呼び出しているので、osascriptの周りを回る方法があるのだろうかと疑問に思ったが、それは問題がある場所にあるようだが、appscript(当然の選択?)は今や危険だと思う。

+0

なぜpython [osascriptパッケージ](https://pypi.python.org/pypi/osascript/)はありませんか?この質問に尋ねられた時点では利用できませんでしたか? – ecbrodie

+0

そのプロジェクト[2015年10月に開始しました](https://github.com/russianidiot/osascript.py/commit/33455e1a42f5c3a0361b4f1e5c6952ed8574f0fe)のように見えるので、2013年には利用できませんでした。 しかし、はい、ありがとう! :-) – gimboland

答えて

21

あなたはPyObjCブリッジを使用することができます。

>>> from Foundation import * 
>>> s = NSAppleScript.alloc().initWithSource_("tell app \"Finder\" to activate") 
>>> s.executeAndReturnError_(None) 
+0

ありがとう! 'py-applescript'も良く見えますが、この答えは受け入れられません。 :-) – gimboland

+0

'NSApplScript'のスペルを修正して 'Appl'の後ろに 'e'を追加することができます - あなたのコードを貼り付けて、初めて動作しませんでした! – andrewb

+1

@andrewb、done。ありがとう。 –

20

は、PyPIは例

http://pypi.python.org/pypi/py-applescript

...あなたの友達です:

import applescript 

scpt = applescript.AppleScript(''' 
    on run {arg1, arg2} 
     say arg1 & " " & arg2 
    end run 

    on foo() 
     return "bar" 
    end foo 

    on Baz(x, y) 
     return x * y 
    end bar 
''') 

print(scpt.run('Hello', 'World')) #-> None 
print(scpt.call('foo')) #-> "bar" 
print(scpt.call('Baz', 3, 5)) #-> 15 
+0

ありがとう - 素晴らしい作品。私が知っておくべきもののリストにPyPiを追加します。 – gimboland

+0

PyPIは本当にあなたの友人です。これまでずっと助かりました。 –

+0

例のおかげで、説明はパッケージdocよりもはるかに高速です。 – studgeek

関連する問題