OSX :A definição de um novo manipulador de URL que aponta reta em um script Python

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

  •  19-09-2019
  •  | 
  •  

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

Foi útil?

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
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top