OSX:ストレートのPythonスクリプトで指す新しいURLハンドラを定義します

StackOverflow https://stackoverflow.com/questions/2418910

  •  19-09-2019
  •  | 
  •  

質問

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

私は(の.pyを右クリックし、で開く消え - >アプレットの構築)アプレットにPythonスクリプトを包んました。

私は、アプレットの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>

ただ、あるべき最後の2行、前:

</dict>
</plist>

変更する場合がありますそこには3つの文字列があります:

com.mycompany.AppleScript.LocalCommand
LocalCommand
local

これらの3分の1は、ハンドラIDがある - ので、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
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top