Nochmal: C-Funktion in Python integrieren...

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
TS1234
User
Beiträge: 16
Registriert: Freitag 8. Juni 2007, 19:11

Ich möchte aus C ein Python-Skript aufrufen... das habe ich soweit geschafft...

nun möchte ich eine C-Funktion global in Python-Runtime registrieren, welche ich dann aufrufen kann, wenn ich Python-Skript starte...

(C-Code grob)
-Initialize
-Register Function char* foo(char* a, char* b) <<<problem weiß nicht wie
-RunSimpleString ("x=foo(a,b)")
-Finalize

ach ja ohne wrapper-DLL's usw. sollte es schon gehen... irg. ist es so schwer... ich kenne zwar die C-Api+Embedding-Tut - aber ich kann die Funktionen dazu nicht finden... und wie die Kommunikation zw. C und Py gehen soll verstehe ich auch noch nicht

Ein Beispiel wäre genial
Joghurt
User
Beiträge: 877
Registriert: Dienstag 15. Februar 2005, 15:07

Mach es mit SWIG. Das manuell zu machen bringt keine Vorteile und ist nun unnötig Arbeit.

www.swig.org
Benutzeravatar
veers
User
Beiträge: 1219
Registriert: Mittwoch 28. Februar 2007, 20:01
Wohnort: Zürich (CH)
Kontaktdaten:

Joghurt hat geschrieben:Mach es mit SWIG. Das manuell zu machen bringt keine Vorteile und ist nun unnötig Arbeit.

www.swig.org
Ich weis nicht mit SWIG gewrappte Libs habe ich als ziemlich buggy und unelegant in Erinnerung. Zudem war/ist das Debuggen immer mühsam.

Mag aber auch Zufall/persönliches empfinden sein.
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

So einfach ist das nicht... wenn du eine C-Funktion aus Python aufrufen willst, musst du mindestens ein Modul erstellen. Da hilft auch nicht, sich um das E&E-Tutorial zu drücken. :)
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

birkenfeld hat geschrieben:wenn du eine C-Funktion aus Python aufrufen willst
Wenn ich es richtig verstehe will TS1234 ja eher das Umgekehrte erreichen.

Vielleicht magst Du eher mal unter comp.lang.python nachfragen? Hier wird so selten embedding besprochen, daß ich vermute die Nachfrage dort ist ergiebiger als hier im Forum. (Überzeugt mich eines Besseren :o .)

Allerdings hat birkenfeld recht: Erst mal das e&e-Tutorial lesen ...

Gruß,
Christian
TS1234
User
Beiträge: 16
Registriert: Freitag 8. Juni 2007, 19:11

ne ich möchte das ohne wrapper, zusatzlibs machen - so direkt wie möglich...

ich meine das geht doch irgendwie... z.B. in blender klappt es auch... da muß man zwar blender-modul importieren

man kann aber aus blender heraus ein python-script starten und dieses script ruft irg. welche internen funktionen von blender auf... (zumindest schaut es so aus)

aber, dass es so kompliziert ist, habe ich ir auch nicht gedacht... eine einzige funktion einzubinden und strings zu übergeben würde mir ja reichen...
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

TS1234 hat geschrieben: man kann aber aus blender heraus ein python-script starten und dieses script ruft irg. welche internen funktionen von blender auf... (zumindest schaut es so aus)
Ja, weil blender höchstwahrscheinlich ein Modul anbietet, das sich von diesen Skripten importieren lässt.
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
Benutzeravatar
veers
User
Beiträge: 1219
Registriert: Mittwoch 28. Februar 2007, 20:01
Wohnort: Zürich (CH)
Kontaktdaten:

Tipp:
XChat hat ein Python Modul. Das dürfte recht simpel sein und macht was du willst. ;)
TS1234
User
Beiträge: 16
Registriert: Freitag 8. Juni 2007, 19:11

hm und was nützt mir xchat jetzt?
BlackJack

`xchat` ist Open Source und in C geschrieben, d.h. Du kannst Dir anschauen wie es dort gemacht wurde.
TS1234
User
Beiträge: 16
Registriert: Freitag 8. Juni 2007, 19:11

hab es mir angesehen... xchat macht es bisschen komplizierter... aber bisschen hat es mich weitergebracht - da habe ich paar strukturen gefunden

und sogar eine api-function:
PyCFunction_NewEx()

diese ist wie erwartet nicht dokumentiert... naja mal schauen ob das klappt...
TS1234
User
Beiträge: 16
Registriert: Freitag 8. Juni 2007, 19:11

hm... hab nun gefunden wie es geht:

http://www.python.org/doc/ext/extending ... dding.html

hab es zuerst nicht verstanden... geht wohl einfacher als zuerst gedacht...
Antworten