OSX: Definición de un nuevo controlador de URL que apunta directamente a una secuencia de comandos de Python
Pregunta
Estoy tratando de definir un nuevo controlador de URL en OSX que apuntará a un script en Python.
Me he envuelto la secuencia de comandos de Python para arriba en un applet (derecha-clic en el .py, y ha ido Abrir con -> Construir applet)
He añadido lo siguiente en Info.plist del applet:
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLName</key>
<string>Do My Thing</string>
<key>CFBundleURLSchemes</key>
<array>
<string>dmt</string>
</array>
</dict>
</array>
También he utilizado el Más preferencias de Internet panel para especificar "dmt" como una protocolo, pero cuando trato de conseguirlo para enlazar el protocolo a mi applet, se dice que "Hubo un problema al configurar la aplicación como el ayudante"
Alguien sabe dónde ir desde aquí?
Gracias
Solución
Después de mucho andar por ahí, me las he arreglado para conseguir este trabajo en OSX ...
Esta es la forma en que lo estoy haciendo:
en el Editor de secuencias de comandos AppleScript, escribir la siguiente secuencia de comandos:
on open location this_URL
do shell script "/scripts/runLocalCommand.py '" & this_URL & "'"
end open location
Si desea asegurarse de que está ejecutando el pitón de un determinado depósito (en mi caso, estoy usando tcsh general, y tienen un archivo .tcshrc que define algunas variables de entorno que quieren tener acceso a) entonces que la línea media podría querer ser:
do shell script "tcsh -c \"/scripts/localCommand.py '" & this_URL & "'\""
Me quedé con ganas de hacer todo de mi procesamiento real dentro de un script en Python - pero debido a la zurdos forma de URL de trabajo en OSX, tienen que llamar a un paquete de aplicaciones en lugar de una secuencia de comandos, por lo que haciendo esto en AppleScript parecía ser el forma más fácil de hacerlo.
en el Editor de secuencias de comandos, guardar como "paquete de aplicaciones"
Para los salvados paquete de aplicaciones y contenidos abiertos. Encontrar el archivo Info.plist, y abrirlo. Agregue el siguiente:
<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>
Justo antes de las dos últimas líneas, que deben ser:
</dict>
</plist>
Hay tres cadenas de ahí que quieran ser cambiado:
com.mycompany.AppleScript.LocalCommand
LocalCommand
local
El tercero de estos es el ID de controlador - por lo que una URL sería locales: // algo
Así que, entonces esto pasa por encima de la secuencia de comandos de Python.
Esto es lo que tengo para esto:
#!/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