Kaydet (Commit) e77e5ef2 authored tarafından Fred Drake's avatar Fred Drake

Change example of retrieving & calling a Python function to not use

PyModule_GetDict(), which is also more flexible: it does not assume that the
"module" is a real module.
üst 292da58a
...@@ -178,24 +178,21 @@ as its argument, which is constructed using the ...@@ -178,24 +178,21 @@ as its argument, which is constructed using the
\cfunction{PyString_FromString()} data conversion routine. \cfunction{PyString_FromString()} data conversion routine.
\begin{verbatim} \begin{verbatim}
pDict = PyModule_GetDict(pModule); pFunc = PyObject_GetAttrString(pModule, argv[2]);
/* pDict is a borrowed reference */ /* pFunc is a new reference */
pFunc = PyDict_GetItemString(pDict, argv[2]);
/* pFun is a borrowed reference */
if (pFunc && PyCallable_Check(pFunc)) { if (pFunc && PyCallable_Check(pFunc)) {
... ...
} }
Py_XDECREF(pFunc);
\end{verbatim} \end{verbatim}
Once the script is loaded, its dictionary is retrieved with Once the script is loaded, the name we're looking for is retrieved
\cfunction{PyModule_GetDict()}. The dictionary is then searched using using \cfunction{PyObject_GetAttrString()}. If the name exists, and
the normal dictionary access routines for the function name. If the the object retunred is callable, you can safely assume that it is a
name exists, and the object retunred is callable, you can safely function. The program then proceeds by constructing a tuple of
assume that it is a function. The program then proceeds by arguments as normal. The call to the Python function is then made
constructing a tuple of arguments as normal. The call to the python with:
function is then made with:
\begin{verbatim} \begin{verbatim}
pValue = PyObject_CallObject(pFunc, pArgs); pValue = PyObject_CallObject(pFunc, pArgs);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment