Domanda

Sto cercando di definire un nuovo gestore URL sotto OSX che puntare a uno script python.

Ho avvolto lo script Python su in un applet (click destro sul Py, e andato Apri con -> Crea Applet)

Ho aggiunto quanto segue nella Info.plist dell'applet:

<key>CFBundleURLTypes</key>
<array>
    <dict>
        <key>CFBundleURLName</key>
        <string>Do My Thing</string>
        <key>CFBundleURLSchemes</key>
        <array>
            <string>dmt</string>
        </array>
    </dict>
</array>

Ho anche usato il Maggiori preferenze Internet riquadro specificare "DMT" come protocollo, ma quando provo a farlo per collegare il protocollo al mio applet, si dice che "C'è stato un impostando l'applicazione come l'assistente problema"

Qualcuno sa dove dovrei andare da qui?

Grazie

È stato utile?

Soluzione

Dopo un sacco di fare in giro, sono riuscito a ottenere questo lavoro sotto OSX ...

Questo è come lo sto facendo:

in Script Editor AppleScript, scrivere il seguente script:

on open location this_URL
    do shell script "/scripts/runLocalCommand.py '" & this_URL & "'"
end open location

Se si vuole fare in modo che si sta eseguendo il Python da un certo shell (nel mio caso, sto usando tcsh in generale, e hanno un .tcshrc che definisce alcune variabili d'ambiente che vogliono avere accesso a) allora che linea mediana potrebbe desiderare di essere:

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

Mi mancava di fare tutto il mio trattamento reale all'interno di uno script python - ma a causa del lavoro mancini modo URL in OSX, devono chiamare un pacchetto di applicazioni piuttosto che uno script, in modo da fare questo in AppleScript sembrava essere la modo più semplice per farlo.

in Script Editor, salvare come "Application Bundle"

Trova i salvati Application Bundle, e contenuto aperto. Trovare il file Info.plist, e aprirlo. Aggiungere la seguente:

<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>

Poco prima che le ultime due righe, che dovrebbero essere:

</dict>
</plist>

Ci sono tre stringhe in là che potrebbero desiderare di essere cambiato:

com.mycompany.AppleScript.LocalCommand
LocalCommand
local

Il terzo di questi è l'ID del gestore - in modo da un URL sarebbe locale: // qualcosa

Quindi, allora questo passa sopra allo script Python.

Questo è quello che ho per questo:

#!/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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top