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

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

Я завернул скрипт Python в апплет (щелкнул правой кнопкой мыши на .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» в качестве протокола, но когда я пытаюсь связать этот протокол с моим апплетом, он говорит, что «была проблема с настройкой приложения в качестве помощника»,

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

благодаря

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

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

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

 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, но из-за того, как обработчики URL работают в OSX, они должны вызывать пакет приложений, а не сценарий, поэтому сделать это в AppleScript, казалось, было самым простым способом сделай это.

в Редакторе сценариев, Сохранить как «Пакет приложений»,

Найдите сохраненный пакет приложений и «Открытое содержимое». Найдите файл 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-адрес будет локальным: // что-то

Итак, тогда это переходит к скрипту Python.

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

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