[capi-sig] Code for a Python function

Stefan Behnel python_capi at behnel.de
Sat Jul 16 06:54:31 CEST 2011

Enrico Granata, 16.07.2011 02:44:
> for my current task I have a Python interpreter embedded in a C++ program.
> There are several ways through which the user can interact with this interpreter, typing code into it, and possibly also def-fining functions.
> I need to be able to look into all defined functions, find one given its name and (here comes the hard part) read whatever code it currently contains.
> I looked into the API and there is a PyCodeObject class, but it is subject to change at any time and I do not want to start using code that might just change the next time the user upgrades Python. Is there any documented and portable-across-versions way to read the code into a Python function just given its name?


as this question refers to Python's introspection capabilities in general, 
this isn't the perfect place to ask. The general Python list would be a 
better place.

That being said, PyCodeObject doesn't actually contain the source code but 
the compiled byte code. You didn't state what you wanted to do with the 
code, so this may or may not be what you want. In fact, you didn't state 
your actual goals at all, so it's not obvious to me that you will really 
need the source code for what you are trying to achieve.

The code object also contains references to the place the source code 
originated from (file path and source lines). However, given that you 
expect users to "type code into the interpreter", instead of loading code 
from files, this will not allow you to get at the source code when the 
function originated in the interpreter.


More information about the capi-sig mailing list