Я пытаюсь определить новый обработчик URL под OSX, который укажет на сценарий Python.
Я обернул сценарий Python в апплет (щелкнутый правой кнопкой на .py, и уведенный Открывают With-> Build Applet),
Я добавил следующее в Info.plist апплета:
CFBundleURLTypes
CFBundleURLName
Do My Thing
CFBundleURLSchemes
dmt
Я также использовал Больше интернет-предпочтительной области для определения "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
Третья из них - ID обработчика - так что URL будет local://something
Итак, затем это передается в 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