OSX: Definición de un nuevo controlador de URL que apunta directamente a un script de Python

Estoy tratando de definir un nuevo controlador de URL en OSX que apuntará a un script de python.

Envolví la secuencia de comandos de Python en un applet (hice clic con el botón derecho en el .py y me fui a Open With -> Build Applet)

He añadido lo siguiente en la lista de información del applet:

CFBundleURLTypes   CFBundleURLName Do My Thing CFBundleURLSchemes  dmt    

También he usado el panel Más preferencias de Internet para especificar “dmt” como protocolo, pero cuando trato de vincular el protocolo a mi applet, dice que “hubo un problema al configurar la aplicación como el ayudante”

¿Alguien sabe a dónde debo ir desde aquí?

Gracias

Después de un montón de problemas, he logrado que esto funcione bajo OSX …

Así es como lo estoy haciendo:

en el Editor de secuencias de comandos de AppleScript, escriba 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 Python desde un determinado shell (en mi caso, en general estoy usando tcsh y tengo un archivo .tcshrc que define algunas variables de entorno a las que quiero tener acceso). La línea podría querer ser:

 do shell script "tcsh -c \"/scripts/localCommand.py '" & this_URL & "'\"" 

Quería hacer todo mi procesamiento real dentro de un script de Python, pero debido a la forma en que los manejadores de URL funcionan en OSX, tienen que llamar un paquete de aplicaciones en lugar de un script, por lo que hacerlo en AppleScript parece ser la forma más fácil de hacerlo. hazlo.

en el editor de secuencias de comandos, guardar como un “paquete de aplicaciones”

Busque el paquete de aplicaciones guardado y abra Contenidos. Busque el archivo Info.plist y ábralo. Agregue lo siguiente:

 CFBundleIdentifier com.mycompany.AppleScript.LocalCommand CFBundleURLTypes   CFBundleURLName LocalCommand CFBundleURLSchemes  local    

Justo antes de las dos últimas líneas, que deberían ser:

   

Hay tres cadenas allí que podrían querer ser cambiadas:

 com.mycompany.AppleScript.LocalCommand LocalCommand local 

El tercero de estos es el ID del controlador, por lo que una URL sería local: // algo

Entonces, esto pasa al script 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