Après beaucoup de déconner, j'ai réussi à obtenir ce travail sous Mac OS X ...
Voilà comment je fais:
dans le script AppleScript rédacteur en chef, écrire le script suivant:
on open location this_URL
do shell script "/scripts/runLocalCommand.py '" & this_URL & "'"
end open location
Si vous voulez vous assurer que vous utilisez Python à partir d'une certaine coquille (dans mon cas, j'utilise tcsh en général, et un fil .tcshrc e qui définit certaines variables d'environnement que je veux avoir accès à) alors que ligne médiane pourrait vouloir être:
do shell script "tcsh -c \"/scripts/localCommand.py '" & this_URL & "'\""
je voulais faire tout mon traitement réelle à l'intérieur d'un script python - mais à cause de la manière Les gestionnaires d'URL fonctionnent sous OSX, ils doivent appeler un ensemble d'applications plutôt qu'un script, ce qui semble être le moyen le plus facile de le faire dans AppleScript.
dans l'éditeur de script, Enregistrer sous un « ensemble d'applications »
Trouver l'ensemble d'applications enregistrée et Open Table des matières. Recherchez le fichier Info.plist et ouvrez-le. Ajoutez ce qui suit:
<key>CFBundleIdentifier</key>
<string>com.mycompany.AppleScript.LocalCommand</string>
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLName</key>
<string>LocalCommand</string>
<key>CFBundleURLSchemes</key>
<array>
<string>local</string>
</array>
</dict>
</array>
Juste avant les deux dernières lignes, ce qui devrait être:
</dict>
</plist>
Il y a trois cordes là-dedans qui pourraient vouloir changer:
com.mycompany.AppleScript.LocalCommand
LocalCommand
local
Les le troisième d'entre eux est l'ID du gestionnaire - donc une URL serait locale: // quelque chose
Alors, alors cela passe ove r au script Python.
C'est ce que j'ai pour cela:
#!/usr/bin/env python
import sys
import urllib
arg = sys.argv[1]
handler, fullPath = arg.split(":", 1)
path, fullArgs = fullPath.split("?", 1)
action = path.strip("/")
args = fullArgs.split("&")
params = {}
for arg in args:
key, value = map(urllib.unquote, arg.split("=", 1))
params[key] = value
Vous pouvez également utiliser py2app pour découper le bit AppleScript, je crois. – spieden
Avez-vous depuis trouvé un moyen plus facile de faire cela? Cela semble être un processus assez complexe. En outre, je construis un '.app' en Python qui voudrait utiliser un rappel de rappel de protocole personnalisé pour l'autorisation avec un service web.Contrairement à l'exécution d'un script Python, je m'attends à ce qu'une instance de l'application s'exécute au moment où l'appel de protocole est effectué. Comment puis-je m'assurer qu'il est géré par l'instance ouverte de l'application? – fatuhoku
@fatuhoku l'application doit détecter qu'elle est déjà en cours d'exécution et transmettre la requête via une sorte d'ipc. –