Comment vérifier en AppleScript si une application est en cours d'exécution, sans avoir à lancer - par l'intermédiaire du osascript utilitaire

De considérer les éléments suivants 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

Le problème: lorsque je l'exécute via le osascript utilitaire de ligne de commande, si Safari n'est pas en cours d'exécution, il est lancé et l'écriture des rapports d'Exécution". Ce n'est pas le comportement que j'ai un désir ou d'attendre. Notez que cela fonctionne comme souhaité/prévu lorsque vous exécutez l'intérieur de l'Éditeur AppleScript.

Est-ce un osascript bug /problème connu? Ou est-il en quelque sorte l'intention de comportement pour des raisons que je suis absent? Quelqu'un peut-il faire qu'il fonctionne comme souhaité? (BTW, je suis sous OSX 10.7.5; je ne vois pas comment obtenir osascript pour signaler un numéro de version).

Si vous commentez la tell /end tell lignes, il se comporte comme je l'avais prévu: si Safari n'est pas en cours d'exécution, il ne se lance pas, et imprime "ne fonctionne Pas". Donc, il semble pour moi comme le tell est ce qui est à l'origine de Safari à être lancé, mais il n'a pas besoin d'être exécuté, il suffit de présenter dans le script...? Pendant un moment je me suis demandé si c'était peut être juste la façon dont tell est censé fonctionner, mais depuis qu'il n'est pas travail comme celui-ci dans l'Éditeur AppleScript, je ne crois pas...

En fait, en voici un autre, la garance, la version ayant le même comportement:

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

Ce toujours lance Safari, même si tell est à l'intérieur d'un if false bloc après l'instruction de retour! (Mais encore une fois, c'est bien dans l'Éditeur AppleScript.)

BTW, ce comportement n'est pas limitée à Safari, mais il n'est pas universel:

  • Les applications concernées incluent: Safari, TextEdit, iPhoto, l'Éditeur AppleScript, iTerm, ...
  • Non les applications concernées incluent: Google Chrome, iTunes, Aperçu, de Messagerie, d'un Terminal, Carnet d'Adresses, Echofon, ...

Donc, quelqu'un a une idée sur comment je pourrais les corriger ou de les contourner cela? Est-il un osascript bug? Ou ai-je raté quelque chose à propos d'AppleScript de la sémantique?

Pour le contexte: je suis en train d'écrire un script (pour être intégré appelé à partir de python) qui interroge les navigateurs ouverts pour les Url de tous les onglets qu'ils ont ouvert; j'ai tout fonctionne bien sauf qu'il a toujours lance Safari, si c'est ouvert ou pas. J'ai cuit que le comportement indésirable pour le test simple cas illustré ci-dessus. Je ne suis pas au courant de tout moyen d'exécuter ce script à partir de python sans l'aide de osascript, autres que appscript, que je ne veux pas utiliser, parce que il n'est plus développé/pris en charge/recommandé.

Merci beaucoup pour toutes les entrées /points de vue!

InformationsquelleAutor gimboland | 2013-04-17