Как получить доступ к URL-адресу пользовательского протокола, используемому для вызова приложения MACOS, которое состоит из одного файла Python (из кода Python) - PullRequest
0 голосов
/ 28 декабря 2018

Я написал небольшой файл python, который я упаковываю как .app и устанавливаю на macos (последняя версия).Приложение предназначено для запуска с использованием пользовательского протокола, похожего на «abc: // efg / ijk / lmn».Файл python использует пакет pyobjc и намеревается использовать его для реализации бизнес-логики.У меня есть возможность использовать только язык Python для реализации моей бизнес-логики из-за устаревших причин.

Мне нужно получить доступ к вызывающему пользовательскому URL "abc: // efg / ijk / lmn" изнутри кода Pythonи разобрать значения.«Efg», «ijk» и «lmn» в пользовательском URL будут различаться и будут использоваться для принятия некоторых решений в дальнейшем.

Я перепробовал несколько вещей из того, что я мог найти в Интернете, но я не могу получить доступ к пользовательскому URL-адресу с помощью в коде Python.Значение sys.argv имеет следующий вид: sys.argv = ['/Applications/XXXXXApp.app/Contents/MacOS/XXXXXApp', '-psn_0_4490312']

Но в Windows sys.argv [0] имеет значениезаполнен пользовательским URL.

Буду признателен за любые указания.

Ниже приведен код, который я пробовал среди многих других его вариантов.

`из импорта какао NSObject

mylogger = open (os.path.expanduser (" ~ /Desktop / somefile.txt "), 'w +')

class apple_event_handler (NSObject):

 def applicationWillFinishLaunching_(self, notification):
    mylogger.write("Will finish ")


def applicationDidFinishLaunching_(self, notification):
    mylogger.write("Did Finish")


def handleAppleEvent_withReplyEvent_(self, event, reply_event):
    theURL = event.descriptorForKeyword_(fourCharToInt(b'----'))
    mylogger.write("********* Handler Invoked !!!  *********")
    mylogger.write("********* the URL = " + str(theURL))
    mylogger.write(*self.args)

aem = NSAppleEventManager.sharedAppleEventManager ()

aeh = apple_event_handler.alloc (). init ()

aem.setEventHandler_andSelector_forEventClass_andEventID_ (aeh, "handleAppleEvent: withReplyEvent:", 1, 1) `

...