13

OSX で Python スクリプトを指す新しい URL ハンドラを定義しようとしています。

Python スクリプトをアプレットにラップしました (.py を右クリックし、[アプリケーションから開く] -> [アプレットを構築] を選択)。

アプレットの 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」をプロトコルとして指定しましたが、プロトコルをアプレットにリンクさせようとすると、「アプリをヘルパーとして設定する際に問題が発生しました」と表示されます。

ここからどこへ行けばいいのか誰か知っていますか?

ありがとう

4

1 に答える 1

15

いろいろいじった後、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
于 2010-03-23T10:35:10.217 に答える