Re: Registering a python function in C
On Sep 3, 7:11 pm, fernando [EMAIL PROTECTED] wrote: Is Maya a different python build than what is contained at python.org? If so, I suggest you get your C program to work with the latest python build from python.org. Then see if you can get it to work with the Maya version. Ok, did that. If I write a normal C++ program and use the python installed in my system, everything works ok and I can call the python funtions. From within maya(where the C code is running as a plugin), nothing happens. I tried removing my python installation so that only the one that comes with maya is running, but then I have no python.h or libs to compile against!! I found no help at the maya/python newsgroup, is there anyone who has done this before??? Thanks for all the help! From what I understand, it seems like maya includes a python build/ download when you download maya. You should be able to get the libs and include files from there. It also looks like maya explicitly says what python build it uses when it is started up interactively. I would bet that your installation of maya and your (different) installation of python are conflicting. -- http://mail.python.org/mailman/listinfo/python-list
Re: Registering a python function in C
Is Maya a different python build than what is contained at python.org? If so, I suggest you get your C program to work with the latest python build from python.org. Then see if you can get it to work with the Maya version. Ok, did that. If I write a normal C++ program and use the python installed in my system, everything works ok and I can call the python funtions. From within maya(where the C code is running as a plugin), nothing happens. I tried removing my python installation so that only the one that comes with maya is running, but then I have no python.h or libs to compile against!! I found no help at the maya/python newsgroup, is there anyone who has done this before??? I don't really know how maya works with python. Is it possible to just run arbitrary python code from maya? Can you get the version strings and stuff? import sys print sys.version That might give you a clue. It might just be that you need to compile against a different version of Python. You could always just download the different versions of Python and see if the included Python.h and Python.lib work. I would go in this order: 2.3, 2.4, 2.2, 2.5. Matt -- http://mail.python.org/mailman/listinfo/python-list
Re: Registering a python function in C
Is Maya a different python build than what is contained at python.org? If so, I suggest you get your C program to work with the latest python build from python.org. Then see if you can get it to work with the Maya version. Ok, did that. If I write a normal C++ program and use the python installed in my system, everything works ok and I can call the python funtions. From within maya(where the C code is running as a plugin), nothing happens. I tried removing my python installation so that only the one that comes with maya is running, but then I have no python.h or libs to compile against!! I found no help at the maya/python newsgroup, is there anyone who has done this before??? Thanks for all the help! -- http://mail.python.org/mailman/listinfo/python-list
Re: Registering a python function in C
fernando [EMAIL PROTECTED] writes: Could someone post an example on how to register a python function as a callback in a C function? If I understand correctly, your C function receives a Python function (as a function object of type PyObject *), which you need to call from C. To do that, call PyObject_CallFunction(obj, format, args...) where format and args are documented in http://docs.python.org/api/arg-parsing.html. Does that help? Also note that there is a dedicated mailing list for the Python/C API; see http://mail.python.org/mailman/listinfo/capi-sig . -- http://mail.python.org/mailman/listinfo/python-list
Re: Registering a python function in C
Thanks for the responses. To be more specific, this code is part of a Maya plugin. The funcion MFnPlugin::registerUI takes a pointer to a PyObject which is the function that will set up the UI for that plugin. The code Matimus posted seems to me exactly like what I need to do, except that maya gives me an error when I call PyImport_ImportModule... I don't even have a chance to check the return value, Maya simply gives up. I have checked that python is initialized by the time I call this function, and the python path is correct, I can load the module from the maya python interpreter. What bugs me is that PyImport_ImportModule doesn't even return, it should return 0 if something bad happened, right? Here's my code: if(Py_IsInitialized()) cout python is already initialized endl; if(!Py_IsInitialized()){ cout had do initialize python endl; Py_Initialize(); } PyObject* mod= PyImport_ImportModule(vzPyTest); if(mod == 0){ cout didn't load endl; } PyObject* func1 = PyObject_GetAttrString(mod, vzPyTest.test1); PyObject* func2 = PyObject_GetAttrString(mod, vzPyTest.test2); plugin.registerUI(func1, func2); Thanks for the help!!! -- http://mail.python.org/mailman/listinfo/python-list
Re: Registering a python function in C
On Aug 31, 3:33 pm, fernando [EMAIL PROTECTED] wrote: Thanks for the responses. To be more specific, this code is part of a Maya plugin. The funcion MFnPlugin::registerUI takes a pointer to a PyObject which is the function that will set up the UI for that plugin. The code Matimus posted seems to me exactly like what I need to do, except that maya gives me an error when I call PyImport_ImportModule... I don't even have a chance to check the return value, Maya simply gives up. I have checked that python is initialized by the time I call this function, and the python path is correct, I can load the module from the maya python interpreter. What bugs me is that PyImport_ImportModule doesn't even return, it should return 0 if something bad happened, right? Here's my code: if(Py_IsInitialized()) cout python is already initialized endl; if(!Py_IsInitialized()){ cout had do initialize python endl; Py_Initialize();} PyObject* mod= PyImport_ImportModule(vzPyTest); if(mod == 0){ cout didn't load endl;} PyObject* func1 = PyObject_GetAttrString(mod, vzPyTest.test1); PyObject* func2 = PyObject_GetAttrString(mod, vzPyTest.test2); plugin.registerUI(func1, func2); Thanks for the help!!! One thing I've learned is that the C interface can be tricky the first time. Is Maya a different python build than what is contained at python.org? If so, I suggest you get your C program to work with the latest python build from python.org. Then see if you can get it to work with the Maya version. -- http://mail.python.org/mailman/listinfo/python-list
Registering a python function in C
Could someone post an example on how to register a python function as a callback in a C function? It expects a pointer to PyObject... how do I expose that? Basically, the signature of the function is foo(PyObject* obj), where obj is the callback function... It's not exactly extending or embedding, I've looked at those examples but they don't really show how to do this... Thanks for the help! -- http://mail.python.org/mailman/listinfo/python-list
Re: Registering a python function in C
On Aug 30, 2:21 pm, fernando [EMAIL PROTECTED] wrote: Could someone post an example on how to register a python function as a callback in a C function? It expects a pointer to PyObject... how do I expose that? Basically, the signature of the function is foo(PyObject* obj), where obj is the callback function... It's not exactly extending or embedding, I've looked at those examples but they don't really show how to do this... Thanks for the help! It most definitely is extending or embedding, it just doesn't follow the examples provided. I can't be too specific because I don't know what your environment is like. As in, have you already initialized python and all of that? Do you have access to _any_ PyObject* variables? Here is something that _might_ help (not tested): [code] PyObject* mod; PyObject* func; mod = PyImport_ImportModule(mymodule); func = PyObject_GetAttrString( mod, myfunc) ; foo(func); [/code] It might be useful to look at the Python/C API Reference Manual, not just the extending and embedding stuff. http://docs.python.org/api/api.html Matt -- http://mail.python.org/mailman/listinfo/python-list