OSX: Definición de un nuevo controlador de URL que apunta directamente a una secuencia de comandos de Python

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

  •  19-09-2019
  •  | 
  •  

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

¿Fue útil?

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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top