Mac OS X: Définition d'un nouveau gestionnaire d'URL qui pointe directement à un script Python

StackOverflow https://stackoverflow.com/questions/2418910

  •  19-09-2019
  •  | 
  •  

Question

Je suis en train de définir un nouveau gestionnaire d'URL sous OSX qui pointera à un script python.

Je l'ai enveloppé le script Python vers le haut dans une applet (cliqué du bouton droit sur le py, et allé Ouvrir avec -> Construire Applet)

Je l'ai ajouté ce qui suit dans le Info.plist de l'applet:

<key>CFBundleURLTypes</key>
<array>
    <dict>
        <key>CFBundleURLName</key>
        <string>Do My Thing</string>
        <key>CFBundleURLSchemes</key>
        <array>
            <string>dmt</string>
        </array>
    </dict>
</array>

J'ai aussi utilisé Plus préférences Internet volet pour spécifier « dmt » comme protocole, mais lorsque je tente de le faire pour lier le protocole à mon applet, il est dit que « il y avait un problème fixant l'application comme l'aide »

Quelqu'un sait où je devrais aller d'ici?

Merci

Était-ce utile?

La solution

Après beaucoup de déconner, j'ai réussi à obtenir ce travail sous Mac OS X ...

Voici comment je le fais:

dans l'éditeur de script AppleScript, é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 fichier .tcshrc 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 l'URL de façon handers travail dans OSX, ils doivent appeler un faisceau d'application plutôt que d'un script, faisant cela dans AppleScript semblait être la meilleure façon de le faire.

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

Le tiers d'entre eux est l'ID de gestionnaire - si une URL serait locale: // quelque chose

Alors, cela passe au-dessus du script Python.

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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top