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» в качестве протокола, но когда я пытаюсь связать этот протокол с моим апплетом, он говорит, что «была проблема с настройкой приложения в качестве помощника»,
Кто-нибудь знает, куда мне идти?
благодаря
- Распределение минимальной установки python с приложением
- Проблема с gtk на macosx
- Домашняя установка OpenCV 3.0, не связанная с Python
- Python на MacOS полностью игнорирует rlimit
- Как зарегистрировать активность программы python в Mac OS X
После многих беспорядков мне удалось заставить это работать под 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
- Python: отображение из интервалов в значения
- Python: дифференцирование между векторами строк и столбцов
- Как выполнить произвольный сценарий оболочки и передать несколько переменных через Python?
- Как удалить Python 3.4 из Mac OS X?
- Ошибка GCC: команда «gcc-4.0» не удалась с статусом выхода 1
- Python virtualenv забывает использовать Python 3?
- Отчеты python os.path.exists False, когда файлы есть
- Python os.list_dir останавливается на один уровень
- Почему в Ubuntu и MacOS параметры вывода python отличаются по-разному?
- python -> как напечатать «блок», используя ascii # 219 в mac
- os.path.exists Возвращает False w / Escaped Paths Включая пробелы