Frage

Ich versuche, einen neuen URL-Handler unter OSX zu definieren, die in einem Python-Skript verweisen.

Ich habe das Skript Python eingewickelt in ein Applet (auf der Py rechts geklickt hat, und öffnen gegangen mit -> Build Applet)

Ich habe folgendes in das Applet-Info.plist hinzugefügt:

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

Ich habe auch die Weitere Internet-Einstellungen Bereich „dmt“ als angeben Protokoll, aber wenn ich versuche, es zu erhalten, das Protokoll zu meinem Applet zu verbinden, heißt es, dass „es ein Problem war die App als Helfer Einstellung“

Wer weiß, wo ich von hier aus gehen?

Danke

War es hilfreich?

Lösung

Nach vielen Herumspielen, ich habe es geschaffen, diese Arbeit unter OSX zu bekommen ...

Dies ist, wie ich es tue:

im Applescript Script Editor, schreiben Sie das folgende Skript:

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

Wenn Sie sicherstellen möchten, sind Sie den Python aus einer bestimmten Shell laufen (in meinem Fall, ich bin mit tcsh im Allgemeinen und habe eine .tcshrc-Datei, die einige Umgebungsvariablen definiert, die ich will, um Zugang zu haben) dann, dass Mittellinie könnte sein wollen:

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

Ich will all meine eigentlichen Verarbeitung in einem Python-Skript zu tun - sondern wegen der Art und Weise URL handers Arbeit in OSX, sie haben eher ein Anwendungspaket nennen als ein Skript, so dass dies in Applescript zu tun schien das zu sein, einfachste Weg, es zu tun.

im Skript-Editor, Speichern Als "Application Bundle"

Finden Sie das gespeicherte Anwendung Bundle und Open Inhalt. Finden Sie die Info.plist-Datei und öffnen Sie sie. Fügen Sie wie folgt vor:

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

Kurz vor den letzten beiden Zeilen, die sein sollten:

</dict>
</plist>

Es gibt drei Saiten da drin, die geändert werden könnten wollen:

com.mycompany.AppleScript.LocalCommand
LocalCommand
local

Die dritte davon ist die ID-Handler - so eine URL wäre local: // etwas

Also, dann geht dies auf den Python-Skript über.

Das ist, was ich für diese bekommen:

#!/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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top