STINNER Victor <[email protected]> added the comment:
Example of C code that I added to _testcapi:
---
static PyObject *
get_caller_locals(PyObject *self, PyObject *Py_UNUSED(args))
{
PyFrameObject *frame = PyThreadState_GetFrame(PyThreadState_Get());
if (frame == NULL) {
Py_RETURN_NONE;
}
return PyObject_GetAttrString(frame, "f_locals");
}
---
Python example:
---
import _testcapi
def f():
x = 1
y = 2
print(_testcapi.get_caller_locals())
f()
---
Output on Python 3.11:
---
{'x': 1, 'y': 2}
---
=> it just works.
A PyFrameObject is a regular Python object, you can use functions like
PyObject_GetAttrString().
Maybe I missed something, correct me if I'm wrong.
----------
_______________________________________
Python tracker <[email protected]>
<https://bugs.python.org/issue46166>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe:
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com