次の AppleScript を検討してください。
on is_running(appName)
tell application "System Events" to (name of processes) contains appName
end is_running
set safRunning to is_running("Safari")
if safRunning then
tell application "Safari"
-- Stuff I only want executed if Safari is running goes here.
end tell
return "Running"
else
return "Not running"
end if
問題:osascript
コマンド ライン ユーティリティを使用してこれを実行すると、Safari が実行されていない場合、Safari が起動され、スクリプトが「実行中」と報告されます。これは、私が望む、または期待する動作ではありません。AppleScript Editor 内で実行すると、期待どおりに機能することに注意してください。
これはosascript
バグ/既知の問題ですか? それとも、私が見逃している理由で意図された動作ですか?誰でも希望どおりに動作させることができますか? (ところで、OSX 10.7.5 を実行していますosascript
。バージョン番号を報告する方法がわかりません)。
tell
/行をコメントアウトすると、end tell
期待どおりに動作します。Safari が実行されていない場合、起動せず、「実行されていません」と出力されます。だから、Safariが起動する原因のように思えtell
ますが、実際に実行する必要はなく、スクリプトに存在するだけです...? tell
しばらくの間、これが本来の動作なのだろうかと思っていましたが、AppleScript Editor ではこのように動作しないため、そうではないと思います...
実際、同様の動作をする別の茜色のバージョンを次に示します。
on is_running(appName)
tell application "System Events" to (name of processes) contains appName
end is_running
set safRunning to is_running("Safari")
return safRunning
if false then
tell application "Safari"
end tell
end if
return ステートメントの後のブロックtell
内にある場合でも、これは常に Safari を起動します! if false
(繰り返しになりますが、これは AppleScript Editor では問題ありません。)
ところで、この動作は Safari に限定されませんが、普遍的でもありません。
- 影響を受けるアプリには、Safari、TextEdit、iPhoto、AppleScript Editor、iTerm などがあります。
- 影響を受けないアプリには、Google Chrome、iTunes、Preview、Mail、Terminal、Address Book、Echofon などがあります。
それで、これをどのように修正またはルーティングするかについて誰かアイデアがありますか? osascript
バグですか?それとも、AppleScript のセマンティクスについて何かが欠けていますか?
コンテキストについて:開いているブラウザに、開いているタブのURLを照会するスクリプト(Pythonから埋め込まれたり呼び出されたりするスクリプト)を作成しようとしています。開いているかどうかに関係なく、常にSafariを起動することを除いて、すべて正常に動作しています。その望ましくない動作を、上に示した単純なテスト ケースに要約しました。appscriptを使用せずに Python からこのスクリプトを実行する方法osascript
はわかりませんが、 appscriptは開発/サポート/推奨されなくなったため、使用したくありません。
すべての入力/洞察に感謝します!