[Python-de] Einbinden eines Pythonskriptes in C++
Marcus
m_konermann at gmx.de
Wed May 15 03:36:45 EDT 2002
Hallo !
Bin nach etlichen Neuinstallation meiner Python version doch schon recht
verzweifelt. Ich versuche vergebens ein Beispiel aus dem Buch von Tobis
Himstedt "Mit Python programmieren"
ans laufen zu bekommen. In dem Beispiel soll C Sourcecode mit einem
Python Skript erweitert werden. Nur aus unerfindlichen Gründen bekomme
ich es nicht an laufen. Es treten häufig Speicherzugriffsfehler auf. Da
ich mal von ausgehe, dass das Programm laufen sollte, muss es entweder
an meiner Python Installation oder an meiner Compilereinstellung liegen.
Vielleicht hat jemand die Möglichkeit, nachfolgendes Listing der beiden
Dateien mal bei sich zu testen.
Hier das vollständige Listing beider Dateien:
#include <Python.h>
#include <stdlib.h>
void getValues(char **firstName, char **lastName, char **profession) {
FILE *fp = NULL;
PyObject *module, *fn, *ln, *prof;
int res;
/* Das getValues.py-Skript laeuft im Namespace des
__main__ Moduls. Daher muss dieses Modul erstmal ermittelt werden*/
module = PyImport_AddModule("__main__");
/* Das Skript ausfuehren, dass die Dateneingabe erledigt */
fp = fopen("getValues.py","r");
res = PyRun_SimpleFile(fp,"getValues.py");
if (res == -1) {
puts("Error");
exit(1);
}
/* Nun koennen die Variablen ausgelesen werden*/
/* Sie sind Attribute von __main__*/
fn = PyObject_GetAttrString(module, "firstName");
ln = PyObject_GetAttrString(module, "lastName");
prof = PyObject_GetAttrString(module, "profession");
/*Nun noch konvertieren */
*firstName = PyString_AsString(fn);
*lastName = PyString_AsString(ln);
*profession = PyString_AsString(prof);
}
void doComplicatedStuff(char *firstName, char *lastName, char *profession){
/*Datenbank o.Ae.
printf("Werte %s %s %s\n", firstName, lastName, profession);*/
}
void main(int argc, char *argv[]) {
char *firstName, *lastName, *profession;
Py_Initialize();
PySys_SetArgv(argc, argv);
getValues(&firstName, &lastName, &profession);
/*doComplicatedStuff(firstName, lastName, profession);*/
Py_Exit(0);
}
und hier ist das Python Skript, welches ich aufrufen möchte:
import Tkinter
import sys
import pdb
def ready():
global firstName, lastName, profession
global fn, ln, p
firstname=fn.get()
lastName=ln.get()
profession=p.get()
root.destroy()
def init():
global fn, ln, p, root
root = Tkinter.Tk()
fn = Tkinter.StringVar()
ln = Tkinter.StringVar()
p = Tkinter.StringVar()
#pdb.set_trace()
top = Tkinter.Frame(master=root)
top.pack(side= 'top')
bottom=Tkinter.Frame(master=root)
bottom.pack(side='bottom', fill= 'x')
m=Tkinter.Message(master=top, width="4c",
justify="left",
font="Times 14 bold", text=
"Bitte geben Sie folgende Daten ein"
" und druecken Sie dann bitte Eingabe")
m.pack(side='left')
input=Tkinter.Frame(master=top)
input.pack(side='right')
Tkinter.Label(master=input,
text='Vorname').grid(row=0, column=0)
Tkinter.Label(master=input,
text='Nachname').grid(row=1, column=0)
Tkinter.Label(master=input,
text='Beruf').grid(row=2, column=0)
Tkinter.Entry(master=input,
textvariable=fn).grid(row=0, column=1)
Tkinter.Entry(master=input,
textvariable=ln).grid(row=1, column=1)
Tkinter.Entry(master=input,
textvariable=p).grid(row=2, column=1)
Tkinter.Button(master=bottom, text="Eingabe",
command=ready).pack(side='right')
root.mainloop()
init()
Vielleicht hat ja jemand schon mal einen ähnlichen Fehler bekommen und
weiss Rat.
Vielen Dank für die Hilfe
Marcus
More information about the Python-de
mailing list