我试图定义OSX下的一个新的URL处理程序将在一个Python脚本点。

我包裹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”作为协议,但是当我试图让它协议链接到我的小应用程序,它说,“有一个问题设定应用程序作为助手”

任何人都知道我应该何去何从?

由于

有帮助吗?

解决方案

在很多乱搞的,我已经成功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>

就在最后两行,这应该是前:

</dict>
</plist>

有三串在那里,可能要被改变:

com.mycompany.AppleScript.LocalCommand
LocalCommand
local

的这些第三是处理程序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