OSX: определение нового обработчика URL, указывающего прямо на Python script

Я пытаюсь определить новый обработчик URL под OSX, который будет указывать на python script.

Я завернул Python script в апплет (щелкнул правой кнопкой мыши на .py и ушел с Open With → Build Applet)

Я добавил в апплет Info.plist следующее:

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

Я также использовал панель "Дополнительные настройки Интернета" , чтобы указать "dmt" в качестве протокола, но когда я попытаюсь подключить его к ссылке протокол к моему апплету, он говорит, что "была проблема с установкой приложения в качестве помощника"

Кто-нибудь знает, куда мне идти?

Спасибо

Ответ 1

После многих беспорядков мне удалось заставить это работать под OSX...

Вот как я это делаю:

в редакторе AppleScript Script напишите следующий script:

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

Если вы хотите убедиться, что вы используете Python из определенной оболочки (в моем случае я использую tcsh вообще и имею файл .tcshrc, который определяет некоторые переменные среды, к которым я хочу иметь доступ) то эта средняя линия может захотеть:

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

Я хотел выполнять всю свою фактическую обработку внутри python Script, но из-за того, как обработчики URL работают в OSX, они должны вызывать пакет приложений, а не script, поэтому это делается в AppleScript казалось, был самым простым способом сделать это.

в редакторе Script, Сохранить как "Пакет приложений"

Найти сохраненный пакет приложений и Открыть содержимое. Найдите файл Info.plist и откройте его. Добавьте следующее:

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

Непосредственно перед двумя последними строками, которые должны быть:

</dict>
</plist>

Есть три строки, которые могут быть изменены:

com.mycompany.AppleScript.LocalCommand
LocalCommand
local

Третий из них - идентификатор обработчика, поэтому URL-адрес будет локальным://something

Итак, затем он переходит к Python script.

Вот что я получил за это:

#!/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