
HAllo Liste, ich bin leider in die verlegenheit gekommen einen Wrapper für C zu schreiben. Ich programmiere in 4GL und kann aus dieser Sprache c-Programme aufrufen. Leider keine Python-Programme. Nu benötige ich einen Wrapper der mit die Pythonprogramme aufruft. Da ich leider keine Ahnung von C und von Wrappern habe brauche ich eine eine kleine Starthilfe. Google hat mir leider nicht weitergeholfen. Jede Info wird dankend angenommen. Danke schonmal im vorraus. -- cu Roland Kruggel mailto: rk.liste at bbf7.de System: Intel, Debian etch, 2.6.16.16, xfce4 KDE 3.5

Roland M. Kruggel schrieb:
Ich programmiere in 4GL und kann aus dieser Sprache c-Programme aufrufen. Leider keine Python-Programme.
Was heißt hier aufrufen? Du meinst, ganz normale externe Programme aus deinem Programm heraus starten? Mit fork()/exec() oder system()? Wenn das so ist, kannst du genauso gut Pythonskripte starten, schließlich ist der Pythoninterpreter ein Programm wie jedes andere auch. In C sähe das ungefähr so aus (siehe 'man 3 system'): system('python /path/to/my/python/script.py'); Wie das in 4GL funktioniert, weiß ich nicht. Wenn du allerdings von 4GL Zugriff auf die Daten deines Pythonskripts zugreifen willst oder vice versa, dann musst du dir etwas anderes überlegen. Tipp: mal nach "inter-process communication" (IPC) googlen. Chris

Am Samstag, 5. Mai 2007 17:49 schrieb Christopher Arndt:
Nein, das meine ich nicht.
Vllt. das auchnicht :( Ich kann z.b. von einem C-Programm auf die 4gl-variablen und functionen zugreifen. Das will ich mit python machen. hier mal ein kleine c-beispiel ---> #include "qxdefs.h" int get_the_key(int argc) { int keycode; keycode = uiInKey(); retint(keycode); return(1); } ---< Das programm kann ich aus 4gl direkt mit einem 'call get_the_key()' aufrufen. -- cu Roland Kruggel mailto: rk.liste at bbf7.de System: Intel, Debian etch, 2.6.16.16, xfce4 KDE 3.5

"Roland M. Kruggel" <rk.liste@bbf7.de> writes:
<kleinlich_modus> Das ist kein C Programm. </kleinlich_modus> Je nach Platform, Python Umgebung und API Gestaltung der C Funktionen bieten sich da verschiedene Wege an. Die Standard Python Dokumentation beschreibt das vorgehen mit Hilfe der Python C API eigendlich recht ausführlich und ausreichend. Has du deine C Funktionalität in einer Dynamisch Linkbaren Bibliothek unter Windows, Linux oder Mac OS X vorliegen (bei anderen UNIXen bin ich mir unsicher) ist die ab Python 2.5 zum Standardlieferumfang gehörende Bibliothek "ctypes" zwei oder drei Blicke Wert. In einer Umgebung in der größere Datenmengen in Vektor oder Matrix Form herumgereicht werden sollen, NumPy/SciPy bietet verschiedene Mechanismen. Einige Erfahrung habe ich mit f2py, ursprünglich für das Wrappen von FORTRAN Code gedacht, kann man inzwischen auch C Funktionen behandeln. Bei SciPy dabei ist "weave". Hier werden die Wrapper inline im Python Code definiert. Des weiteren bieten sich noch an CXX boost.python (beide C++) SWIG (C und C++ für verschiedene Scriptsprachen) pyrex und alles was ich vergessen habe. Es gibt nicht den goldenen Weg. Ausgehende von deinen Anforderungen mußt du dich für eine Methode entscheiden. Hier noch ein paar Links: + C API <http://docs.python.org/api/api.html> + ctypes <http://docs.python.org/lib/module-ctypes.html> + CXX <http://cxx.sourceforge.net/> + numpy/f2py <http://cens.ioc.ee/projects/f2py2e/> + pyrex <http://www.cosc.canterbury.ac.nz/greg.ewing/python/Pyrex/> + weave <http://scipy.org/Weave> + SWIG <http://swig.sourceforge.net/> + Boost.Python <http://boost.org/libs/python/doc/index.html> Gruß Berthold --

Super Antwort. Danke. Du hast mich auf den 'Weg geschubst' -- cu Roland Kruggel mailto: rk.liste at bbf7.de System: Intel, Debian etch, 2.6.16.16, xfce4 KDE 3.5

Am Samstag, 5. Mai 2007 20:49 schrieb Berthold Höllmann:
Das dabei immer sip <http://www.riverbankcomputing.co.uk/sip/index.php> fehlen muß, kann ich nicht verstehen, obwohl - damit die recht populären PyQt3, PyQt4, PyKDE und PyQwt Projekte realisiert wurden - es sehr effizienten Code erstellt (typisch eine .so/.dll pro Modul, keine Extra-Python Hilfsmodule) - und es trotzdem recht einfach zu handhaben ist. Ansonsten ist Deine Antwort eine eins mit Sternchen wert, Bertold ;-) Pete

-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Christopher Arndt schrieb:
system('python /path/to/my/python/script.py');
Ab Python 2.5 besser subprocess verwenden, das spart viele Probleme. - -- Schönen Gruß - Regards Hartmut Goebel Goebel Consult - Spezialist für IT-Sicherheit - www.goebel-consult.de -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.7 (GNU/Linux) Comment: Using GnuPG with Mandriva - http://enigmail.mozdev.org iQEVAwUBRjzKgszajR0mSa83AQIFUwgAgdoGXEWOoewlGgB3iqWDno2fxhAy+SkU Nu3SbisAZj6DfDejUaapEIhrepKbXCuCkDRcIo67hjvgwDOhrPqk3iOn8EyzRjfy cCTy5D22dLFeEt+p4tboUdj+r7+DVLdgnWC9LT+qTJUF/uVvEZKsH2MvSmV8qsVu LYaGK/XsOUmdZVm5Y4amsgw9L5o/79irl8lTgnH63OMEIiqTco80NmMEEomf0IZl 0YT1NcRhXgggkfW0MHAGjuwNOa49IBfCFFyfB93y/Dm12FD+xVUA9UcLb65w5tRO robfczBN3Uj+DGRiaxyTLY5FDlj3yVOEV28ILijqo4Q73mypNlFQpQ== =oRXm -----END PGP SIGNATURE-----

-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Sebastian Wiesner schrieb:
Ich dachte, es ist erst seit 2.5 dabei. Aber wie Andreas bemerkte, gibt es das schon in 2.4.
Btw, die betreffende Stelle bezog sich auf C, nicht auf Python ;)
Schon klar. Aber Christopher riet zu system(). - -- Schönen Gruß - Regards Hartmut Goebel Goebel Consult - Spezialist für IT-Sicherheit - www.goebel-consult.de -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.7 (GNU/Linux) Comment: Using GnuPG with Mandriva - http://enigmail.mozdev.org iQEVAwUBRjzO2MzajR0mSa83AQIOPQf/bcU0VPY3ZyvsnSFIaWYDc13aGZ6/Nc4v hRTF1I7Gy4fHw6tnrWQ9xdqbSEMikuHJeCwm/7WfRoZhWCqegMhPozD9InJ7Tkum QY23CEf/3e8V65vkV3r0oXqd7qYFa2hftIRju2/u6ffgU8Ur6yKM57ZU0VhPAxQ0 iB/sH3QUwqPEk9RJdC5DdACiWhSCroU+SHQHFeAd5E2Cd12ccN8dvLH7VWNJzvmO sQST9FQR2WzNbIGwoO30nByVX3oQ/EO2ZN7UyL3/uZkMc+h7qO4Nw1VEHp02vS5z GauYFR5zh7gPgacS0dy0EHezDQG69XgX/BuVw5UQp4FUDjW7pnbkHA== =sFmC -----END PGP SIGNATURE-----

Roland M. Kruggel schrieb:
Ich programmiere in 4GL und kann aus dieser Sprache c-Programme aufrufen. Leider keine Python-Programme.
Was heißt hier aufrufen? Du meinst, ganz normale externe Programme aus deinem Programm heraus starten? Mit fork()/exec() oder system()? Wenn das so ist, kannst du genauso gut Pythonskripte starten, schließlich ist der Pythoninterpreter ein Programm wie jedes andere auch. In C sähe das ungefähr so aus (siehe 'man 3 system'): system('python /path/to/my/python/script.py'); Wie das in 4GL funktioniert, weiß ich nicht. Wenn du allerdings von 4GL Zugriff auf die Daten deines Pythonskripts zugreifen willst oder vice versa, dann musst du dir etwas anderes überlegen. Tipp: mal nach "inter-process communication" (IPC) googlen. Chris

Am Samstag, 5. Mai 2007 17:49 schrieb Christopher Arndt:
Nein, das meine ich nicht.
Vllt. das auchnicht :( Ich kann z.b. von einem C-Programm auf die 4gl-variablen und functionen zugreifen. Das will ich mit python machen. hier mal ein kleine c-beispiel ---> #include "qxdefs.h" int get_the_key(int argc) { int keycode; keycode = uiInKey(); retint(keycode); return(1); } ---< Das programm kann ich aus 4gl direkt mit einem 'call get_the_key()' aufrufen. -- cu Roland Kruggel mailto: rk.liste at bbf7.de System: Intel, Debian etch, 2.6.16.16, xfce4 KDE 3.5

"Roland M. Kruggel" <rk.liste@bbf7.de> writes:
<kleinlich_modus> Das ist kein C Programm. </kleinlich_modus> Je nach Platform, Python Umgebung und API Gestaltung der C Funktionen bieten sich da verschiedene Wege an. Die Standard Python Dokumentation beschreibt das vorgehen mit Hilfe der Python C API eigendlich recht ausführlich und ausreichend. Has du deine C Funktionalität in einer Dynamisch Linkbaren Bibliothek unter Windows, Linux oder Mac OS X vorliegen (bei anderen UNIXen bin ich mir unsicher) ist die ab Python 2.5 zum Standardlieferumfang gehörende Bibliothek "ctypes" zwei oder drei Blicke Wert. In einer Umgebung in der größere Datenmengen in Vektor oder Matrix Form herumgereicht werden sollen, NumPy/SciPy bietet verschiedene Mechanismen. Einige Erfahrung habe ich mit f2py, ursprünglich für das Wrappen von FORTRAN Code gedacht, kann man inzwischen auch C Funktionen behandeln. Bei SciPy dabei ist "weave". Hier werden die Wrapper inline im Python Code definiert. Des weiteren bieten sich noch an CXX boost.python (beide C++) SWIG (C und C++ für verschiedene Scriptsprachen) pyrex und alles was ich vergessen habe. Es gibt nicht den goldenen Weg. Ausgehende von deinen Anforderungen mußt du dich für eine Methode entscheiden. Hier noch ein paar Links: + C API <http://docs.python.org/api/api.html> + ctypes <http://docs.python.org/lib/module-ctypes.html> + CXX <http://cxx.sourceforge.net/> + numpy/f2py <http://cens.ioc.ee/projects/f2py2e/> + pyrex <http://www.cosc.canterbury.ac.nz/greg.ewing/python/Pyrex/> + weave <http://scipy.org/Weave> + SWIG <http://swig.sourceforge.net/> + Boost.Python <http://boost.org/libs/python/doc/index.html> Gruß Berthold --

Super Antwort. Danke. Du hast mich auf den 'Weg geschubst' -- cu Roland Kruggel mailto: rk.liste at bbf7.de System: Intel, Debian etch, 2.6.16.16, xfce4 KDE 3.5

Am Samstag, 5. Mai 2007 20:49 schrieb Berthold Höllmann:
Das dabei immer sip <http://www.riverbankcomputing.co.uk/sip/index.php> fehlen muß, kann ich nicht verstehen, obwohl - damit die recht populären PyQt3, PyQt4, PyKDE und PyQwt Projekte realisiert wurden - es sehr effizienten Code erstellt (typisch eine .so/.dll pro Modul, keine Extra-Python Hilfsmodule) - und es trotzdem recht einfach zu handhaben ist. Ansonsten ist Deine Antwort eine eins mit Sternchen wert, Bertold ;-) Pete

-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Christopher Arndt schrieb:
system('python /path/to/my/python/script.py');
Ab Python 2.5 besser subprocess verwenden, das spart viele Probleme. - -- Schönen Gruß - Regards Hartmut Goebel Goebel Consult - Spezialist für IT-Sicherheit - www.goebel-consult.de -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.7 (GNU/Linux) Comment: Using GnuPG with Mandriva - http://enigmail.mozdev.org iQEVAwUBRjzKgszajR0mSa83AQIFUwgAgdoGXEWOoewlGgB3iqWDno2fxhAy+SkU Nu3SbisAZj6DfDejUaapEIhrepKbXCuCkDRcIo67hjvgwDOhrPqk3iOn8EyzRjfy cCTy5D22dLFeEt+p4tboUdj+r7+DVLdgnWC9LT+qTJUF/uVvEZKsH2MvSmV8qsVu LYaGK/XsOUmdZVm5Y4amsgw9L5o/79irl8lTgnH63OMEIiqTco80NmMEEomf0IZl 0YT1NcRhXgggkfW0MHAGjuwNOa49IBfCFFyfB93y/Dm12FD+xVUA9UcLb65w5tRO robfczBN3Uj+DGRiaxyTLY5FDlj3yVOEV28ILijqo4Q73mypNlFQpQ== =oRXm -----END PGP SIGNATURE-----

-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Sebastian Wiesner schrieb:
Ich dachte, es ist erst seit 2.5 dabei. Aber wie Andreas bemerkte, gibt es das schon in 2.4.
Btw, die betreffende Stelle bezog sich auf C, nicht auf Python ;)
Schon klar. Aber Christopher riet zu system(). - -- Schönen Gruß - Regards Hartmut Goebel Goebel Consult - Spezialist für IT-Sicherheit - www.goebel-consult.de -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.7 (GNU/Linux) Comment: Using GnuPG with Mandriva - http://enigmail.mozdev.org iQEVAwUBRjzO2MzajR0mSa83AQIOPQf/bcU0VPY3ZyvsnSFIaWYDc13aGZ6/Nc4v hRTF1I7Gy4fHw6tnrWQ9xdqbSEMikuHJeCwm/7WfRoZhWCqegMhPozD9InJ7Tkum QY23CEf/3e8V65vkV3r0oXqd7qYFa2hftIRju2/u6ffgU8Ur6yKM57ZU0VhPAxQ0 iB/sH3QUwqPEk9RJdC5DdACiWhSCroU+SHQHFeAd5E2Cd12ccN8dvLH7VWNJzvmO sQST9FQR2WzNbIGwoO30nByVX3oQ/EO2ZN7UyL3/uZkMc+h7qO4Nw1VEHp02vS5z GauYFR5zh7gPgacS0dy0EHezDQG69XgX/BuVw5UQp4FUDjW7pnbkHA== =sFmC -----END PGP SIGNATURE-----
participants (7)
-
Andreas Jung
-
bhoel@despammed.com
-
Christopher Arndt
-
Hans-Peter Jansen
-
Hartmut Goebel
-
Roland M. Kruggel
-
Sebastian Wiesner