Mit Python auf die c-bibliotheken zugreifen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
boing

wie greife ich mit Python auf die c-bibliotheken zu ?

danke im Voraus
joerg
User
Beiträge: 188
Registriert: Samstag 17. August 2002, 17:48
Wohnort: Berlin
Kontaktdaten:

boing hat geschrieben:wie greife ich mit Python auf die c-bibliotheken zu ?

Prinzipiell muß man einen Wrapper schreiben, um auf beliebige C-Bibliotheken zugreifen zu können. Ein Wrapper ist ein Stückchen C-Code, was die C-Funktionen auf Python-Methoden abbildet und die Datentypen konvertiert. Doku dazu ist die Dokumentation zum C-API von Python. Auf diese Weise kann man auch C++ oder Fortran-Routinen anbinden.

Für umfangreiche Bibliotheken empfehle ich einen sogenannten Interface-generator, der aus den Headerfiles der C-Bibliothek mehr oder weniger automatisch den Wrappercode generiert. Am bekanntesten ist hier SWIG, der neben Python auch TCL,Perl uvam. anbinden kann.

Wenn es nur wenige Funktionen sind, die angebunden werden sollen, mache ich sowas lieber per Hand, da kann man das Design der Python-Schnittstelle besser beeinflussen, z.B. die reinen Funktionen objektorientiert verpacken...

Unter Windows kenne ich mich nicht aus, aber da gibt es - glaube ich - die Möglichkeit direkt Funktionen aus den DLLs anzusprechen.
boing

hallo Joerg,

erstmal vielen Dank für den Tip.

könnten Sie vielleicht es mir an einem Beispiel zeigen. Ich habe als Attachments zwei kleine Anwendungen dazu geschickt.

danke im Vorraus.

------------

/* Dies ist ein Programm in C */

#include <stdio.h>

class person
{
private:
char* name;
char* geschlecht;
public:
void set_name(char* n) { name = n; }
void set_geschlecht(char* g) { geschlecht = g; }
char* get_name() {return name;}
char* get_geschlecht() {return geschlecht;}
};


void main()
{
/*
person student;
student.set_name("Peter");
student.set_geschlecht("mannlich");
printf("Name : ");
printf(student.get_name());
printf("\nGeschlecht : ");
printf(student.get_geschlecht());
printf("\n<<< ende\n");
*/
}


------------

# dies ist ein Python-Programm

# hier instanzierung der Klasse person aus punkt.cpp

print "<<< ende"
piddon
Gründer
Beiträge: 410
Registriert: Dienstag 30. Juli 2002, 18:03
Wohnort: Oestrich-Winkel
Kontaktdaten:

In dem buch 'Python 2 . Einführung und Referenz der objektorientierten Skriptsprache' gibt es ein Kapitel über einbetten in C und umgekehrt.

Dort solltest du weitere Informationen finden.
irc: #python.de @ irc.freenode.net | [url=http://pythonwiki.pocoo.org]python-wiki[/url] | [url=http://www.pythonwiki.de/PythonDeForum/Faq]python-forum FAQ[/url]
joerg
User
Beiträge: 188
Registriert: Samstag 17. August 2002, 17:48
Wohnort: Berlin
Kontaktdaten:

boing hat geschrieben:hallo Joerg,
...
könnten Sie vielleicht es mir an einem Beispiel zeigen. Ich habe als Attachments zwei kleine Anwendungen dazu geschickt.
...
danke im Vorraus.
Sorry, aber das würde diesen Rahmen und auch meine Zeit etwas sprengen. Auf www.python.org gibt es diverse Doku dazu, z.B. unter http://www.python.org/doc/Hints.html im Abschnitt "Extending and Embedding".

Außerdem sieht mir der Code eher nach C++ aus, das wird noch etwas komplexer, wenn man die C++-Klassen flexibel auf Python-Klassen oder -Types abbilden will. Auch dazu gibt es verschiedene beschriebene Ansätze in der Doku. Python ab 2.2 bietet da wohl auch noch mehr Möglichkeiten, damit kenne ich mich auch noch nicht aus.

Viel Glück

Jörg
Antworten