Рассмотрим следующий 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 не запущен, она запускается, а script сообщает "Запуск". Это не то поведение, которое я желаю или ожидаю. Обратите внимание, что он работает по желанию/ожиданию при запуске в редакторе AppleScript.
Является ли это ошибкой osascript
/известной проблемой? Или это как-то поведенческое поведение по причинам, которые мне не хватает? Может ли кто-нибудь заставить его работать по своему желанию? (BTW Я запускаю OSX 10.7.5, я не вижу, как получить osascript
, чтобы сообщить номер версии).
Если вы прокомментируете строки tell
/end tell
, это будет выглядеть так, как я ожидал: если Safari не запущен, он не запускает его и печатает "Не работает". Так что мне кажется, что tell
вызывает запуск Safari, но его фактически не нужно выполнять, просто присутствуя в script...? Некоторое время я задавался вопросом, возможно ли это, как должно работать tell
, но поскольку в редакторе AppleScript это не так, я думаю, не...
На самом деле, здесь другая, безумная версия с аналогичным поведением:
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
Это все еще запускает Safari, хотя tell
находится внутри блока if false
после оператора return! (Но опять же, это прекрасно в редакторе AppleScript.)
Кстати, это поведение не ограничивается Safari, но оно также не универсально:
- Затронутые приложения включают в себя: Safari, TextEdit, iPhoto, редактор AppleScript, iTerm,...
- Не затрагиваемые приложения включают: Google Chrome, iTunes, Preview, Mail, Terminal, Address Book, Echofon,...
Итак, есть ли у кого-нибудь какие-либо идеи о том, как я могу это исправить или направить? Это ошибка osascript
? Или мне что-то не хватает в семантике AppleScript?
В контексте: я пытаюсь написать script (для встраивания/вызова из некоторого python), который запрашивает открытые браузеры для URL-адресов любых вкладок, которые они открыли; У меня все работает нормально, за исключением того, что он всегда запускает Safari, независимо от того, открыта она или нет. Я сварил это нежелательное поведение в простом тестовом примере, показанном выше. Я не знаю, как запустить этот script из python без использования osascript
, кроме appscript, который я не хочу использовать потому что больше не разрабатывается/не поддерживается/не рекомендуется.
Большое спасибо за все входы/идеи!