いろいろいじった後、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 スクリプト内で実行したいと考えていましたが、OSX で URL ハンドラーが機能する方法のために、スクリプトではなくアプリケーション バンドルを呼び出す必要があるため、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>
最後の 2 行の直前。次のようになります。
</dict>
</plist>
そこには、変更する必要がある可能性のある 3 つの文字列があります。
com.mycompany.AppleScript.LocalCommand
LocalCommand
local
これらの 3 番目はハンドラー 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