ruft Objective C-Funktionen von Python auf?

8

Gibt es eine Möglichkeit, eine Objective-C-Funktion dynamisch von Python aus aufzurufen?

Beispiel: Auf dem Mac möchte ich diese Objective-C-Funktion aufrufen

%Vor%

ohne ein spezielles Python-Wrapper-Modul vorkompilieren zu müssen.

    
Mark Harrison 29.09.2009, 00:47
quelle

4 Antworten

6

Seit OS X 10.5 wurde OS X mit der PyObjC -Brücke, einer Python-Objective-C-Brücke, ausgeliefert. Es verwendet das Framework BridgeSupport , um Objective-C-Frameworks Python zuzuordnen. Im Gegensatz zu MacRuby ist PyObjC eine klassische Brücke - für jedes ObjC-Objekt gibt es ein Proxy-Objekt auf der Python-Seite und umgekehrt. Die Bridge ist jedoch ziemlich nahtlos, und es ist möglich, ganze Anwendungen in PyObjC zu schreiben (Xcode hat einige grundlegende PyObjC-Unterstützung und Sie können die App- und Dateivorlagen für Xcode vom PyObjC SVN unter dem obigen Link herunterladen). Viele Leute verwenden es für Dienstprogramme oder für App-Scripting / Plugins. Apples Entwicklerwebsite hat auch eine Einführung zum Entwickeln von Cocoa-Anwendungen mit Python über PyObjC, die etwas veraltet ist, aber möglicherweise sei ein guter Überblick für dich.

In Ihrem Fall ruft der folgende Code [NSSpeechSynthesizer availableVoices] :

auf %Vor%

was zurückgibt

%Vor%

(ein überbrückter NSCFArray) auf meiner SL-Maschine.

    
Barry Wark 29.09.2009, 03:38
quelle
19

Wie andere bereits erwähnt haben, ist PyObjC der richtige Weg. Aber, um der Vollständigkeit halber, hier ist, wie Sie es mit ctypes tun können, falls Sie es brauchen, um zu arbeiten Versionen von OS X vor 10.5, auf denen PyObjC nicht installiert ist:

%Vor%

Es ist nicht schön, aber es macht den Job erledigt. Die endgültige Liste der verfügbaren Namen wird in der Variablen voiceNames oben gespeichert.

2012-4-28 Update : Fixiert für 64-Bit-Python-Builds, indem sichergestellt wird, dass alle Parameter und Rückgabetypen als Zeiger anstelle von 32-Bit-Ganzzahlen übergeben werden.

    
Adam Rosenfield 29.09.2009 04:58
quelle
4

Mac OS X ab 10.5 wurde mit Python und dem objc-Modul geliefert, mit dem Sie machen können, was Sie wollen.

Ein Beispiel:

%Vor%

Hier finden Sie weitere Dokumentation .

    
Benno 29.09.2009 00:59
quelle
3

Sie möchten wahrscheinlich PyObjC . Das heißt, ich habe es nie selbst benutzt (ich habe nur Demos gesehen), also bin ich mir nicht sicher, dass es tun wird, was du brauchst.

    
Stephen Canon 29.09.2009 00:59
quelle

Tags und Links