Después de mucho andar por ahí, que las han arreglado para conseguir este trabajo en OSX ...
Así es como lo estoy haciendo:
en la secuencia de comandos AppleScript editor, escriba el siguiente script:
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 fil .tcshrc e que define algunas variables de entorno que quieren tener acceso a), entonces esa línea media podría querer ser:
do shell script "tcsh -c \"/scripts/localCommand.py '" & this_URL & "'\""
yo quería hacer todo de mi procesamiento real dentro de un script en Python - pero debido a la forma Los desarrolladores de URL trabajan en OSX, tienen que llamar a 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.
en el Editor de secuencias de comandos, guardar como "paquete de aplicaciones"
Encuentra los salvados paquete de aplicaciones y contenidos abiertos. Busque el archivo Info.plist y ábralo. 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
Los el tercero de estos es la ID del manejador, por lo que una URL sería local: // algo
Entonces, esto pasa r a 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
También es posible usar py2app para cortar el bit de AppleScript, creo. – spieden
¿Desde entonces ha encontrado una manera más fácil de hacer esto? Parece un proceso bastante complicado aún. Además, estoy construyendo un '.app' fuera de Python que quisiera utilizar una devolución de llamada de protocolo de devolución de llamada personalizada para la autorización con un servicio web.A diferencia de simplemente ejecutar un script de Python, espero que una instancia de la aplicación se ejecute en el momento en que se realiza la llamada al protocolo. ¿Cómo me aseguro de que sea manejado por la instancia abierta de la aplicación? – fatuhoku
@fatuhoku la aplicación necesita detectar que ya se está ejecutando y reenviar la solicitud a través de algún tipo de ipc. –