문제

Python 스크립트를 가리키는 OSX에서 새 URL 핸들러를 정의하려고합니다.

파이썬 스크립트를 애플릿으로 래과했습니다 (.py를 마우스 오른쪽 버튼으로 클릭하고 -> 빌드 애플릿으로 열었습니다)

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"를 프로토콜로 지정하려면 프로토콜을 애플릿에 연결하려고 할 때 "앱을 도우미로 설정하는 데 문제가있었습니다"라고 말합니다.

내가 여기서 어디로 가야하는지 아는 사람 있나요?

감사

도움이 되었습니까?

해결책

많은 혼란을 겪은 후, 나는 이것을 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

이 중 세 번째는 핸들러 ID입니다. 그래서 URL은 로컬입니다 : //

그래서 이것은 파이썬 스크립트로 넘어갑니다.

이것이 제가 이것을 위해 얻은 것입니다.

#!/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