OSX: تحديد معالج URL جديد يشير مباشرة في برنامج نصي بيثون

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

  •  19-09-2019
  •  | 
  •  

سؤال

أحاول تحديد معالج URL جديد تحت OSX الذي سيوجه في نص بيثون.

لقد لفت تطبيق Python Script إلى برنامج صغير (نقر بزر الماوس الأيمن فوق .py، وذهب مفتوحا مع -> Build Applet)

لقد أضفت ما يلي إلى Info applet.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 & "'\""

كنت أرغب في القيام بكل المعالجة الفعلية الخاصة بي داخل برنامج نصي بيثون - ولكن بسبب طريقة عمل URL يعمل في OSX، يتعين عليهم استدعاء حزمة تطبيق بدلا من برنامج نصي، لذا فإن القيام بذلك في AppleScript بدا أن أسهل طريقة ل افعلها.

في محرر البرنامج النصي، احفظ ك "حزمة تطبيق"

العثور على حزمة التطبيق المحفوظة، ومحتويات مفتوحة. ابحث عن الملف. انقر فوق ملف، وفتحه. أضف ما يلي:

<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

ثالث من هذه هو معرف المعالج - لذلك سيكون عنوان 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