(no subject)

praveen tayal p_tayal at lycos.com
Tue Mar 15 10:49:28 EST 2005


Hi Guys,

I am having problems in the following C API program where myOtim_system is callable from python function. The module is listed below - 

static PyObject *
myOptim_system(PyObject *self, PyObject *args)
{
    const char *command;
	double u0, v0, u1, v1, u2, v2, u3, v3;
    int sts;

	/* variables */
	PyObject *pstr, *pmod, *pdict, *pfunc, *pargs;
	char * cstr;
	char *dummy = "Test";
	char *x = "x = ";


    if (!PyArg_ParseTuple(args, "s", &command))
        return NULL;

	/* convert them to the doubles */
	sscanf(command, "%lf %lf %lf %lf %lf %lf %lf %lf", &u0, &v0,
					&u1, &v1, &u2, &v2, &u3, &v3);

	sts = (int) (u0+v0+u1+v1+u2+v2+u3+v3);

	/* trying to call the python program from C */
	/*
	The module name is test2_module and the function name is cv_calc_func
	- get test2_module.cv_calc_func
	*/
	pmod = PyImport_ImportModule("test2_module");
	pdict = PyModule_GetDict(pmod);
	
	/* convert to the PyObject */
	pfunc = PyObject_GetAttrString(pmod, "cv_calc_func");
	pargs =  Py_BuildValue("s", dummy);
	pstr = PyEval_CallObject(pfunc, pargs);
	
	PyArg_Parse(pstr, "s", &cstr);
	printf("%s\n", cstr);

	Py_DECREF(pmod);
	Py_DECREF(pstr);
	Py_DECREF(pfunc);
	Py_DECREF(pargs);


    return Py_BuildValue("i", sts);

}

In the same module I am trying to call the python program from C API. That python program is called test2_module.py. It is listed below - 

import string

message = 'Hi I am here'

def cv_calc_func(dummy):
    s = "warning" + `dummy`
    return s


-----
It contains a method called cv_calc_func(). So now the idea must me clear. I would need to communicate bi-directionally, i.e. from python to C and C to python. This example is inspired by the fact that we use the C func from Numerical recepies in C corresponding to lets say some optimization algorithm. So that we don't re-invent the wheel in python. So we call a C API from python. But in the optimization the objective function value must be returned from a python program, so from C API I should be able to call a python program and then integrate it with my optimization algorithm.

In this example I have tried to use "PyEval_CallObject()" within the "myOptim_system" C API function but it reports memory error. But when I call it from main() it doesn't report any errors.
Just wondering what do I do here?

-regards
Prav 
-- 
_______________________________________________
NEW! Lycos Dating Search. The only place to search multiple dating sites at once.
http://datingsearch.lycos.com




More information about the Python-list mailing list