Dopo un sacco di fare in giro, sono riuscito a ottenere questo lavoro sotto OSX ...
Questo è come lo sto facendo:
nello script AppleScript Editor, 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 fil .tcshrc e che definisce alcune variabili d'ambiente che vogliono avere accesso a) allora che la linea di mezzo 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 modo in cui I gestori di URL funzionano in OSX, devono chiamare un pacchetto di applicazioni piuttosto che uno script, quindi farlo in AppleScript sembra essere il modo più semplice per farlo.
in Script Editor, salvare come "Application Bundle"
Trova i salvati Application Bundle, e contenuto aperto. Trova il file Info.plist e aprilo. Aggiungere il 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 voler essere cambiato:
com.mycompany.AppleScript.LocalCommand
LocalCommand
local
I terzo di questi è l'ID del gestore - quindi un URL sarebbe locale: // qualcosa
Quindi, quindi questo passa ove r 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
Si potrebbe anche usare py2app per tagliare fuori la punta AppleScript, credo. – spieden
Hai trovato un modo più semplice per farlo? Sembra ancora un processo abbastanza coinvolto. Inoltre, sto costruendo un '.app' di Python che vorrebbe usare un callback del protocollo di callback personalizzato per l'autorizzazione con un servizio web.A differenza della semplice esecuzione di uno script Python, mi aspetto che un'istanza dell'applicazione sia in esecuzione al momento della chiamata al protocollo. Come posso assicurarmi che venga gestito dall'istanza aperta dell'applicazione? – fatuhoku
@fatuhoku l'applicazione deve rilevare che è già in esecuzione e inoltrare la richiesta tramite una sorta di ipc. –