OSX :A definição de um novo manipulador de URL que aponta reta em um script Python
Pergunta
Eu estou tentando definir um novo manipulador de URL em OSX que apontam para um script python.
Eu colocou o script Python em um applet (clicou com o botão direito no .py, e foi Abrir Com -> Build Applet)
Eu adicionei o seguinte para a aplicação de Informações.plist:
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLName</key>
<string>Do My Thing</string>
<key>CFBundleURLSchemes</key>
<array>
<string>dmt</string>
</array>
</dict>
</array>
Eu também usei o Mais de Internet do painel de preferências para especificar "dmt" como um protocolo, mas quando eu tentar obtê-lo para vincular o protocolo para a minha aplicação, diz que "houve um problema de definição de aplicativo como o helper"
Alguém sabe onde eu deveria ir a partir daqui?
Obrigado
Solução
Depois de muito andar, eu consegui obter esse trabalho em OSX...
Isto é como eu estou fazendo isso:
no Editor de Scripts AppleScript, escreva o seguinte script:
on open location this_URL
do shell script "/scripts/runLocalCommand.py '" & this_URL & "'"
end open location
Se você quiser se certificar de que está a executar o Python a partir de um certo shell (no meu caso, estou usando o tcsh, em geral, e de ter um .tcshrc arquivo que define algumas variáveis de ambiente que eu quero ter acesso a), em seguida, que a linha média pode ser:
do shell script "tcsh -c \"/scripts/localCommand.py '" & this_URL & "'\""
Eu estava querendo fazer tudo do meu real de processamento dentro de um script python, mas devido a forma como o URL de mão obra no OSX, eles têm que chamar um pacote de aplicativo em vez de um script, para se fazer presente no AppleScript parecia ser a maneira mais fácil de fazê-lo.
no Editor de Scripts, Salvar Como um "Pacote de Aplicativo"
Encontrar a salvo Pacote de Aplicação e Abrir o Conteúdo.Encontrar a Informação.arquivo plist, e abri-lo.Adicione o seguinte:
<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>
Pouco antes de as duas últimas linhas, o que deve ser:
</dict>
</plist>
Há três seqüências de caracteres que pode ser alterado:
com.mycompany.AppleScript.LocalCommand
LocalCommand
local
O terceiro deles é o manipulador de IDENTIFICAÇÃO para uma URL deve ser locais://algo
Assim, então este passa para o script Python.
Isso é o que eu tenho para isso:
#!/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