1.. highlight:: c 2 3 4.. _extending-intro: 5 6****************************** 7Extending Python with C or C++ 8****************************** 9 10It is quite easy to add new built-in modules to Python, if you know how to 11program in C. Such :dfn:`extension modules` can do two things that can't be 12done directly in Python: they can implement new built-in object types, and they 13can call C library functions and system calls. 14 15To support extensions, the Python API (Application Programmers Interface) 16defines a set of functions, macros and variables that provide access to most 17aspects of the Python run-time system. The Python API is incorporated in a C 18source file by including the header ``"Python.h"``. 19 20The compilation of an extension module depends on its intended use as well as on 21your system setup; details are given in later chapters. 22 23.. note:: 24 25 The C extension interface is specific to CPython, and extension modules do 26 not work on other Python implementations. In many cases, it is possible to 27 avoid writing C extensions and preserve portability to other implementations. 28 For example, if your use case is calling C library functions or system calls, 29 you should consider using the :mod:`ctypes` module or the `cffi 30 <https://cffi.readthedocs.io/>`_ library rather than writing 31 custom C code. 32 These modules let you write Python code to interface with C code and are more 33 portable between implementations of Python than writing and compiling a C 34 extension module. 35 36 37.. _extending-simpleexample: 38 39A Simple Example 40================ 41 42Let's create an extension module called ``spam`` (the favorite food of Monty 43Python fans...) and let's say we want to create a Python interface to the C 44library function :c:func:`system` [#]_. This function takes a null-terminated 45character string as argument and returns an integer. We want this function to 46be callable from Python as follows: 47 48.. code-block:: pycon 49 50 >>> import spam 51 >>> status = spam.system("ls -l") 52 53Begin by creating a file :file:`spammodule.c`. (Historically, if a module is 54called ``spam``, the C file containing its implementation is called 55:file:`spammodule.c`; if the module name is very long, like ``spammify``, the 56module name can be just :file:`spammify.c`.) 57 58The first two lines of our file can be:: 59 60 #define PY_SSIZE_T_CLEAN 61 #include <Python.h> 62 63which pulls in the Python API (you can add a comment describing the purpose of 64the module and a copyright notice if you like). 65 66.. note:: 67 68 Since Python may define some pre-processor definitions which affect the standard 69 headers on some systems, you *must* include :file:`Python.h` before any standard 70 headers are included. 71 72 It is recommended to always define ``PY_SSIZE_T_CLEAN`` before including 73 ``Python.h``. See :ref:`parsetuple` for a description of this macro. 74 75All user-visible symbols defined by :file:`Python.h` have a prefix of ``Py`` or 76``PY``, except those defined in standard header files. For convenience, and 77since they are used extensively by the Python interpreter, ``"Python.h"`` 78includes a few standard header files: ``<stdio.h>``, ``<string.h>``, 79``<errno.h>``, and ``<stdlib.h>``. If the latter header file does not exist on 80your system, it declares the functions :c:func:`malloc`, :c:func:`free` and 81:c:func:`realloc` directly. 82 83The next thing we add to our module file is the C function that will be called 84when the Python expression ``spam.system(string)`` is evaluated (we'll see 85shortly how it ends up being called):: 86 87 static PyObject * 88 spam_system(PyObject *self, PyObject *args) 89 { 90 const char *command; 91 int sts; 92 93 if (!PyArg_ParseTuple(args, "s", &command)) 94 return NULL; 95 sts = system(command); 96 return PyLong_FromLong(sts); 97 } 98 99There is a straightforward translation from the argument list in Python (for 100example, the single expression ``"ls -l"``) to the arguments passed to the C 101function. The C function always has two arguments, conventionally named *self* 102and *args*. 103 104The *self* argument points to the module object for module-level functions; 105for a method it would point to the object instance. 106 107The *args* argument will be a pointer to a Python tuple object containing the 108arguments. Each item of the tuple corresponds to an argument in the call's 109argument list. The arguments are Python objects --- in order to do anything 110with them in our C function we have to convert them to C values. The function 111:c:func:`PyArg_ParseTuple` in the Python API checks the argument types and 112converts them to C values. It uses a template string to determine the required 113types of the arguments as well as the types of the C variables into which to 114store the converted values. More about this later. 115 116:c:func:`PyArg_ParseTuple` returns true (nonzero) if all arguments have the right 117type and its components have been stored in the variables whose addresses are 118passed. It returns false (zero) if an invalid argument list was passed. In the 119latter case it also raises an appropriate exception so the calling function can 120return ``NULL`` immediately (as we saw in the example). 121 122 123.. _extending-errors: 124 125Intermezzo: Errors and Exceptions 126================================= 127 128An important convention throughout the Python interpreter is the following: when 129a function fails, it should set an exception condition and return an error value 130(usually ``-1`` or a ``NULL`` pointer). Exception information is stored in 131three members of the interpreter's thread state. These are ``NULL`` if 132there is no exception. Otherwise they are the C equivalents of the members 133of the Python tuple returned by :meth:`sys.exc_info`. These are the 134exception type, exception instance, and a traceback object. It is important 135to know about them to understand how errors are passed around. 136 137The Python API defines a number of functions to set various types of exceptions. 138 139The most common one is :c:func:`PyErr_SetString`. Its arguments are an exception 140object and a C string. The exception object is usually a predefined object like 141:c:data:`PyExc_ZeroDivisionError`. The C string indicates the cause of the error 142and is converted to a Python string object and stored as the "associated value" 143of the exception. 144 145Another useful function is :c:func:`PyErr_SetFromErrno`, which only takes an 146exception argument and constructs the associated value by inspection of the 147global variable :c:data:`errno`. The most general function is 148:c:func:`PyErr_SetObject`, which takes two object arguments, the exception and 149its associated value. You don't need to :c:func:`Py_INCREF` the objects passed 150to any of these functions. 151 152You can test non-destructively whether an exception has been set with 153:c:func:`PyErr_Occurred`. This returns the current exception object, or ``NULL`` 154if no exception has occurred. You normally don't need to call 155:c:func:`PyErr_Occurred` to see whether an error occurred in a function call, 156since you should be able to tell from the return value. 157 158When a function *f* that calls another function *g* detects that the latter 159fails, *f* should itself return an error value (usually ``NULL`` or ``-1``). It 160should *not* call one of the :c:func:`PyErr_\*` functions --- one has already 161been called by *g*. *f*'s caller is then supposed to also return an error 162indication to *its* caller, again *without* calling :c:func:`PyErr_\*`, and so on 163--- the most detailed cause of the error was already reported by the function 164that first detected it. Once the error reaches the Python interpreter's main 165loop, this aborts the currently executing Python code and tries to find an 166exception handler specified by the Python programmer. 167 168(There are situations where a module can actually give a more detailed error 169message by calling another :c:func:`PyErr_\*` function, and in such cases it is 170fine to do so. As a general rule, however, this is not necessary, and can cause 171information about the cause of the error to be lost: most operations can fail 172for a variety of reasons.) 173 174To ignore an exception set by a function call that failed, the exception 175condition must be cleared explicitly by calling :c:func:`PyErr_Clear`. The only 176time C code should call :c:func:`PyErr_Clear` is if it doesn't want to pass the 177error on to the interpreter but wants to handle it completely by itself 178(possibly by trying something else, or pretending nothing went wrong). 179 180Every failing :c:func:`malloc` call must be turned into an exception --- the 181direct caller of :c:func:`malloc` (or :c:func:`realloc`) must call 182:c:func:`PyErr_NoMemory` and return a failure indicator itself. All the 183object-creating functions (for example, :c:func:`PyLong_FromLong`) already do 184this, so this note is only relevant to those who call :c:func:`malloc` directly. 185 186Also note that, with the important exception of :c:func:`PyArg_ParseTuple` and 187friends, functions that return an integer status usually return a positive value 188or zero for success and ``-1`` for failure, like Unix system calls. 189 190Finally, be careful to clean up garbage (by making :c:func:`Py_XDECREF` or 191:c:func:`Py_DECREF` calls for objects you have already created) when you return 192an error indicator! 193 194The choice of which exception to raise is entirely yours. There are predeclared 195C objects corresponding to all built-in Python exceptions, such as 196:c:data:`PyExc_ZeroDivisionError`, which you can use directly. Of course, you 197should choose exceptions wisely --- don't use :c:data:`PyExc_TypeError` to mean 198that a file couldn't be opened (that should probably be :c:data:`PyExc_IOError`). 199If something's wrong with the argument list, the :c:func:`PyArg_ParseTuple` 200function usually raises :c:data:`PyExc_TypeError`. If you have an argument whose 201value must be in a particular range or must satisfy other conditions, 202:c:data:`PyExc_ValueError` is appropriate. 203 204You can also define a new exception that is unique to your module. For this, you 205usually declare a static object variable at the beginning of your file:: 206 207 static PyObject *SpamError; 208 209and initialize it in your module's initialization function (:c:func:`PyInit_spam`) 210with an exception object:: 211 212 PyMODINIT_FUNC 213 PyInit_spam(void) 214 { 215 PyObject *m; 216 217 m = PyModule_Create(&spammodule); 218 if (m == NULL) 219 return NULL; 220 221 SpamError = PyErr_NewException("spam.error", NULL, NULL); 222 Py_XINCREF(SpamError); 223 if (PyModule_AddObject(m, "error", SpamError) < 0) { 224 Py_XDECREF(SpamError); 225 Py_CLEAR(SpamError); 226 Py_DECREF(m); 227 return NULL; 228 } 229 230 return m; 231 } 232 233Note that the Python name for the exception object is :exc:`spam.error`. The 234:c:func:`PyErr_NewException` function may create a class with the base class 235being :exc:`Exception` (unless another class is passed in instead of ``NULL``), 236described in :ref:`bltin-exceptions`. 237 238Note also that the :c:data:`SpamError` variable retains a reference to the newly 239created exception class; this is intentional! Since the exception could be 240removed from the module by external code, an owned reference to the class is 241needed to ensure that it will not be discarded, causing :c:data:`SpamError` to 242become a dangling pointer. Should it become a dangling pointer, C code which 243raises the exception could cause a core dump or other unintended side effects. 244 245We discuss the use of ``PyMODINIT_FUNC`` as a function return type later in this 246sample. 247 248The :exc:`spam.error` exception can be raised in your extension module using a 249call to :c:func:`PyErr_SetString` as shown below:: 250 251 static PyObject * 252 spam_system(PyObject *self, PyObject *args) 253 { 254 const char *command; 255 int sts; 256 257 if (!PyArg_ParseTuple(args, "s", &command)) 258 return NULL; 259 sts = system(command); 260 if (sts < 0) { 261 PyErr_SetString(SpamError, "System command failed"); 262 return NULL; 263 } 264 return PyLong_FromLong(sts); 265 } 266 267 268.. _backtoexample: 269 270Back to the Example 271=================== 272 273Going back to our example function, you should now be able to understand this 274statement:: 275 276 if (!PyArg_ParseTuple(args, "s", &command)) 277 return NULL; 278 279It returns ``NULL`` (the error indicator for functions returning object pointers) 280if an error is detected in the argument list, relying on the exception set by 281:c:func:`PyArg_ParseTuple`. Otherwise the string value of the argument has been 282copied to the local variable :c:data:`command`. This is a pointer assignment and 283you are not supposed to modify the string to which it points (so in Standard C, 284the variable :c:data:`command` should properly be declared as ``const char 285*command``). 286 287The next statement is a call to the Unix function :c:func:`system`, passing it 288the string we just got from :c:func:`PyArg_ParseTuple`:: 289 290 sts = system(command); 291 292Our :func:`spam.system` function must return the value of :c:data:`sts` as a 293Python object. This is done using the function :c:func:`PyLong_FromLong`. :: 294 295 return PyLong_FromLong(sts); 296 297In this case, it will return an integer object. (Yes, even integers are objects 298on the heap in Python!) 299 300If you have a C function that returns no useful argument (a function returning 301:c:type:`void`), the corresponding Python function must return ``None``. You 302need this idiom to do so (which is implemented by the :c:macro:`Py_RETURN_NONE` 303macro):: 304 305 Py_INCREF(Py_None); 306 return Py_None; 307 308:c:data:`Py_None` is the C name for the special Python object ``None``. It is a 309genuine Python object rather than a ``NULL`` pointer, which means "error" in most 310contexts, as we have seen. 311 312 313.. _methodtable: 314 315The Module's Method Table and Initialization Function 316===================================================== 317 318I promised to show how :c:func:`spam_system` is called from Python programs. 319First, we need to list its name and address in a "method table":: 320 321 static PyMethodDef SpamMethods[] = { 322 ... 323 {"system", spam_system, METH_VARARGS, 324 "Execute a shell command."}, 325 ... 326 {NULL, NULL, 0, NULL} /* Sentinel */ 327 }; 328 329Note the third entry (``METH_VARARGS``). This is a flag telling the interpreter 330the calling convention to be used for the C function. It should normally always 331be ``METH_VARARGS`` or ``METH_VARARGS | METH_KEYWORDS``; a value of ``0`` means 332that an obsolete variant of :c:func:`PyArg_ParseTuple` is used. 333 334When using only ``METH_VARARGS``, the function should expect the Python-level 335parameters to be passed in as a tuple acceptable for parsing via 336:c:func:`PyArg_ParseTuple`; more information on this function is provided below. 337 338The :const:`METH_KEYWORDS` bit may be set in the third field if keyword 339arguments should be passed to the function. In this case, the C function should 340accept a third ``PyObject *`` parameter which will be a dictionary of keywords. 341Use :c:func:`PyArg_ParseTupleAndKeywords` to parse the arguments to such a 342function. 343 344The method table must be referenced in the module definition structure:: 345 346 static struct PyModuleDef spammodule = { 347 PyModuleDef_HEAD_INIT, 348 "spam", /* name of module */ 349 spam_doc, /* module documentation, may be NULL */ 350 -1, /* size of per-interpreter state of the module, 351 or -1 if the module keeps state in global variables. */ 352 SpamMethods 353 }; 354 355This structure, in turn, must be passed to the interpreter in the module's 356initialization function. The initialization function must be named 357:c:func:`PyInit_name`, where *name* is the name of the module, and should be the 358only non-\ ``static`` item defined in the module file:: 359 360 PyMODINIT_FUNC 361 PyInit_spam(void) 362 { 363 return PyModule_Create(&spammodule); 364 } 365 366Note that PyMODINIT_FUNC declares the function as ``PyObject *`` return type, 367declares any special linkage declarations required by the platform, and for C++ 368declares the function as ``extern "C"``. 369 370When the Python program imports module :mod:`spam` for the first time, 371:c:func:`PyInit_spam` is called. (See below for comments about embedding Python.) 372It calls :c:func:`PyModule_Create`, which returns a module object, and 373inserts built-in function objects into the newly created module based upon the 374table (an array of :c:type:`PyMethodDef` structures) found in the module definition. 375:c:func:`PyModule_Create` returns a pointer to the module object 376that it creates. It may abort with a fatal error for 377certain errors, or return ``NULL`` if the module could not be initialized 378satisfactorily. The init function must return the module object to its caller, 379so that it then gets inserted into ``sys.modules``. 380 381When embedding Python, the :c:func:`PyInit_spam` function is not called 382automatically unless there's an entry in the :c:data:`PyImport_Inittab` table. 383To add the module to the initialization table, use :c:func:`PyImport_AppendInittab`, 384optionally followed by an import of the module:: 385 386 int 387 main(int argc, char *argv[]) 388 { 389 wchar_t *program = Py_DecodeLocale(argv[0], NULL); 390 if (program == NULL) { 391 fprintf(stderr, "Fatal error: cannot decode argv[0]\n"); 392 exit(1); 393 } 394 395 /* Add a built-in module, before Py_Initialize */ 396 if (PyImport_AppendInittab("spam", PyInit_spam) == -1) { 397 fprintf(stderr, "Error: could not extend in-built modules table\n"); 398 exit(1); 399 } 400 401 /* Pass argv[0] to the Python interpreter */ 402 Py_SetProgramName(program); 403 404 /* Initialize the Python interpreter. Required. 405 If this step fails, it will be a fatal error. */ 406 Py_Initialize(); 407 408 /* Optionally import the module; alternatively, 409 import can be deferred until the embedded script 410 imports it. */ 411 PyObject *pmodule = PyImport_ImportModule("spam"); 412 if (!pmodule) { 413 PyErr_Print(); 414 fprintf(stderr, "Error: could not import module 'spam'\n"); 415 } 416 417 ... 418 419 PyMem_RawFree(program); 420 return 0; 421 } 422 423.. note:: 424 425 Removing entries from ``sys.modules`` or importing compiled modules into 426 multiple interpreters within a process (or following a :c:func:`fork` without an 427 intervening :c:func:`exec`) can create problems for some extension modules. 428 Extension module authors should exercise caution when initializing internal data 429 structures. 430 431A more substantial example module is included in the Python source distribution 432as :file:`Modules/xxmodule.c`. This file may be used as a template or simply 433read as an example. 434 435.. note:: 436 437 Unlike our ``spam`` example, ``xxmodule`` uses *multi-phase initialization* 438 (new in Python 3.5), where a PyModuleDef structure is returned from 439 ``PyInit_spam``, and creation of the module is left to the import machinery. 440 For details on multi-phase initialization, see :PEP:`489`. 441 442 443.. _compilation: 444 445Compilation and Linkage 446======================= 447 448There are two more things to do before you can use your new extension: compiling 449and linking it with the Python system. If you use dynamic loading, the details 450may depend on the style of dynamic loading your system uses; see the chapters 451about building extension modules (chapter :ref:`building`) and additional 452information that pertains only to building on Windows (chapter 453:ref:`building-on-windows`) for more information about this. 454 455If you can't use dynamic loading, or if you want to make your module a permanent 456part of the Python interpreter, you will have to change the configuration setup 457and rebuild the interpreter. Luckily, this is very simple on Unix: just place 458your file (:file:`spammodule.c` for example) in the :file:`Modules/` directory 459of an unpacked source distribution, add a line to the file 460:file:`Modules/Setup.local` describing your file: 461 462.. code-block:: sh 463 464 spam spammodule.o 465 466and rebuild the interpreter by running :program:`make` in the toplevel 467directory. You can also run :program:`make` in the :file:`Modules/` 468subdirectory, but then you must first rebuild :file:`Makefile` there by running 469':program:`make` Makefile'. (This is necessary each time you change the 470:file:`Setup` file.) 471 472If your module requires additional libraries to link with, these can be listed 473on the line in the configuration file as well, for instance: 474 475.. code-block:: sh 476 477 spam spammodule.o -lX11 478 479 480.. _callingpython: 481 482Calling Python Functions from C 483=============================== 484 485So far we have concentrated on making C functions callable from Python. The 486reverse is also useful: calling Python functions from C. This is especially the 487case for libraries that support so-called "callback" functions. If a C 488interface makes use of callbacks, the equivalent Python often needs to provide a 489callback mechanism to the Python programmer; the implementation will require 490calling the Python callback functions from a C callback. Other uses are also 491imaginable. 492 493Fortunately, the Python interpreter is easily called recursively, and there is a 494standard interface to call a Python function. (I won't dwell on how to call the 495Python parser with a particular string as input --- if you're interested, have a 496look at the implementation of the :option:`-c` command line option in 497:file:`Modules/main.c` from the Python source code.) 498 499Calling a Python function is easy. First, the Python program must somehow pass 500you the Python function object. You should provide a function (or some other 501interface) to do this. When this function is called, save a pointer to the 502Python function object (be careful to :c:func:`Py_INCREF` it!) in a global 503variable --- or wherever you see fit. For example, the following function might 504be part of a module definition:: 505 506 static PyObject *my_callback = NULL; 507 508 static PyObject * 509 my_set_callback(PyObject *dummy, PyObject *args) 510 { 511 PyObject *result = NULL; 512 PyObject *temp; 513 514 if (PyArg_ParseTuple(args, "O:set_callback", &temp)) { 515 if (!PyCallable_Check(temp)) { 516 PyErr_SetString(PyExc_TypeError, "parameter must be callable"); 517 return NULL; 518 } 519 Py_XINCREF(temp); /* Add a reference to new callback */ 520 Py_XDECREF(my_callback); /* Dispose of previous callback */ 521 my_callback = temp; /* Remember new callback */ 522 /* Boilerplate to return "None" */ 523 Py_INCREF(Py_None); 524 result = Py_None; 525 } 526 return result; 527 } 528 529This function must be registered with the interpreter using the 530:const:`METH_VARARGS` flag; this is described in section :ref:`methodtable`. The 531:c:func:`PyArg_ParseTuple` function and its arguments are documented in section 532:ref:`parsetuple`. 533 534The macros :c:func:`Py_XINCREF` and :c:func:`Py_XDECREF` increment/decrement the 535reference count of an object and are safe in the presence of ``NULL`` pointers 536(but note that *temp* will not be ``NULL`` in this context). More info on them 537in section :ref:`refcounts`. 538 539.. index:: single: PyObject_CallObject() 540 541Later, when it is time to call the function, you call the C function 542:c:func:`PyObject_CallObject`. This function has two arguments, both pointers to 543arbitrary Python objects: the Python function, and the argument list. The 544argument list must always be a tuple object, whose length is the number of 545arguments. To call the Python function with no arguments, pass in ``NULL``, or 546an empty tuple; to call it with one argument, pass a singleton tuple. 547:c:func:`Py_BuildValue` returns a tuple when its format string consists of zero 548or more format codes between parentheses. For example:: 549 550 int arg; 551 PyObject *arglist; 552 PyObject *result; 553 ... 554 arg = 123; 555 ... 556 /* Time to call the callback */ 557 arglist = Py_BuildValue("(i)", arg); 558 result = PyObject_CallObject(my_callback, arglist); 559 Py_DECREF(arglist); 560 561:c:func:`PyObject_CallObject` returns a Python object pointer: this is the return 562value of the Python function. :c:func:`PyObject_CallObject` is 563"reference-count-neutral" with respect to its arguments. In the example a new 564tuple was created to serve as the argument list, which is 565:c:func:`Py_DECREF`\ -ed immediately after the :c:func:`PyObject_CallObject` 566call. 567 568The return value of :c:func:`PyObject_CallObject` is "new": either it is a brand 569new object, or it is an existing object whose reference count has been 570incremented. So, unless you want to save it in a global variable, you should 571somehow :c:func:`Py_DECREF` the result, even (especially!) if you are not 572interested in its value. 573 574Before you do this, however, it is important to check that the return value 575isn't ``NULL``. If it is, the Python function terminated by raising an exception. 576If the C code that called :c:func:`PyObject_CallObject` is called from Python, it 577should now return an error indication to its Python caller, so the interpreter 578can print a stack trace, or the calling Python code can handle the exception. 579If this is not possible or desirable, the exception should be cleared by calling 580:c:func:`PyErr_Clear`. For example:: 581 582 if (result == NULL) 583 return NULL; /* Pass error back */ 584 ...use result... 585 Py_DECREF(result); 586 587Depending on the desired interface to the Python callback function, you may also 588have to provide an argument list to :c:func:`PyObject_CallObject`. In some cases 589the argument list is also provided by the Python program, through the same 590interface that specified the callback function. It can then be saved and used 591in the same manner as the function object. In other cases, you may have to 592construct a new tuple to pass as the argument list. The simplest way to do this 593is to call :c:func:`Py_BuildValue`. For example, if you want to pass an integral 594event code, you might use the following code:: 595 596 PyObject *arglist; 597 ... 598 arglist = Py_BuildValue("(l)", eventcode); 599 result = PyObject_CallObject(my_callback, arglist); 600 Py_DECREF(arglist); 601 if (result == NULL) 602 return NULL; /* Pass error back */ 603 /* Here maybe use the result */ 604 Py_DECREF(result); 605 606Note the placement of ``Py_DECREF(arglist)`` immediately after the call, before 607the error check! Also note that strictly speaking this code is not complete: 608:c:func:`Py_BuildValue` may run out of memory, and this should be checked. 609 610You may also call a function with keyword arguments by using 611:c:func:`PyObject_Call`, which supports arguments and keyword arguments. As in 612the above example, we use :c:func:`Py_BuildValue` to construct the dictionary. :: 613 614 PyObject *dict; 615 ... 616 dict = Py_BuildValue("{s:i}", "name", val); 617 result = PyObject_Call(my_callback, NULL, dict); 618 Py_DECREF(dict); 619 if (result == NULL) 620 return NULL; /* Pass error back */ 621 /* Here maybe use the result */ 622 Py_DECREF(result); 623 624 625.. _parsetuple: 626 627Extracting Parameters in Extension Functions 628============================================ 629 630.. index:: single: PyArg_ParseTuple() 631 632The :c:func:`PyArg_ParseTuple` function is declared as follows:: 633 634 int PyArg_ParseTuple(PyObject *arg, const char *format, ...); 635 636The *arg* argument must be a tuple object containing an argument list passed 637from Python to a C function. The *format* argument must be a format string, 638whose syntax is explained in :ref:`arg-parsing` in the Python/C API Reference 639Manual. The remaining arguments must be addresses of variables whose type is 640determined by the format string. 641 642Note that while :c:func:`PyArg_ParseTuple` checks that the Python arguments have 643the required types, it cannot check the validity of the addresses of C variables 644passed to the call: if you make mistakes there, your code will probably crash or 645at least overwrite random bits in memory. So be careful! 646 647Note that any Python object references which are provided to the caller are 648*borrowed* references; do not decrement their reference count! 649 650Some example calls:: 651 652 #define PY_SSIZE_T_CLEAN /* Make "s#" use Py_ssize_t rather than int. */ 653 #include <Python.h> 654 655:: 656 657 int ok; 658 int i, j; 659 long k, l; 660 const char *s; 661 Py_ssize_t size; 662 663 ok = PyArg_ParseTuple(args, ""); /* No arguments */ 664 /* Python call: f() */ 665 666:: 667 668 ok = PyArg_ParseTuple(args, "s", &s); /* A string */ 669 /* Possible Python call: f('whoops!') */ 670 671:: 672 673 ok = PyArg_ParseTuple(args, "lls", &k, &l, &s); /* Two longs and a string */ 674 /* Possible Python call: f(1, 2, 'three') */ 675 676:: 677 678 ok = PyArg_ParseTuple(args, "(ii)s#", &i, &j, &s, &size); 679 /* A pair of ints and a string, whose size is also returned */ 680 /* Possible Python call: f((1, 2), 'three') */ 681 682:: 683 684 { 685 const char *file; 686 const char *mode = "r"; 687 int bufsize = 0; 688 ok = PyArg_ParseTuple(args, "s|si", &file, &mode, &bufsize); 689 /* A string, and optionally another string and an integer */ 690 /* Possible Python calls: 691 f('spam') 692 f('spam', 'w') 693 f('spam', 'wb', 100000) */ 694 } 695 696:: 697 698 { 699 int left, top, right, bottom, h, v; 700 ok = PyArg_ParseTuple(args, "((ii)(ii))(ii)", 701 &left, &top, &right, &bottom, &h, &v); 702 /* A rectangle and a point */ 703 /* Possible Python call: 704 f(((0, 0), (400, 300)), (10, 10)) */ 705 } 706 707:: 708 709 { 710 Py_complex c; 711 ok = PyArg_ParseTuple(args, "D:myfunction", &c); 712 /* a complex, also providing a function name for errors */ 713 /* Possible Python call: myfunction(1+2j) */ 714 } 715 716 717.. _parsetupleandkeywords: 718 719Keyword Parameters for Extension Functions 720========================================== 721 722.. index:: single: PyArg_ParseTupleAndKeywords() 723 724The :c:func:`PyArg_ParseTupleAndKeywords` function is declared as follows:: 725 726 int PyArg_ParseTupleAndKeywords(PyObject *arg, PyObject *kwdict, 727 const char *format, char *kwlist[], ...); 728 729The *arg* and *format* parameters are identical to those of the 730:c:func:`PyArg_ParseTuple` function. The *kwdict* parameter is the dictionary of 731keywords received as the third parameter from the Python runtime. The *kwlist* 732parameter is a ``NULL``-terminated list of strings which identify the parameters; 733the names are matched with the type information from *format* from left to 734right. On success, :c:func:`PyArg_ParseTupleAndKeywords` returns true, otherwise 735it returns false and raises an appropriate exception. 736 737.. note:: 738 739 Nested tuples cannot be parsed when using keyword arguments! Keyword parameters 740 passed in which are not present in the *kwlist* will cause :exc:`TypeError` to 741 be raised. 742 743.. index:: single: Philbrick, Geoff 744 745Here is an example module which uses keywords, based on an example by Geoff 746Philbrick (philbrick@hks.com):: 747 748 #define PY_SSIZE_T_CLEAN /* Make "s#" use Py_ssize_t rather than int. */ 749 #include <Python.h> 750 751 static PyObject * 752 keywdarg_parrot(PyObject *self, PyObject *args, PyObject *keywds) 753 { 754 int voltage; 755 const char *state = "a stiff"; 756 const char *action = "voom"; 757 const char *type = "Norwegian Blue"; 758 759 static char *kwlist[] = {"voltage", "state", "action", "type", NULL}; 760 761 if (!PyArg_ParseTupleAndKeywords(args, keywds, "i|sss", kwlist, 762 &voltage, &state, &action, &type)) 763 return NULL; 764 765 printf("-- This parrot wouldn't %s if you put %i Volts through it.\n", 766 action, voltage); 767 printf("-- Lovely plumage, the %s -- It's %s!\n", type, state); 768 769 Py_RETURN_NONE; 770 } 771 772 static PyMethodDef keywdarg_methods[] = { 773 /* The cast of the function is necessary since PyCFunction values 774 * only take two PyObject* parameters, and keywdarg_parrot() takes 775 * three. 776 */ 777 {"parrot", (PyCFunction)(void(*)(void))keywdarg_parrot, METH_VARARGS | METH_KEYWORDS, 778 "Print a lovely skit to standard output."}, 779 {NULL, NULL, 0, NULL} /* sentinel */ 780 }; 781 782 static struct PyModuleDef keywdargmodule = { 783 PyModuleDef_HEAD_INIT, 784 "keywdarg", 785 NULL, 786 -1, 787 keywdarg_methods 788 }; 789 790 PyMODINIT_FUNC 791 PyInit_keywdarg(void) 792 { 793 return PyModule_Create(&keywdargmodule); 794 } 795 796 797.. _buildvalue: 798 799Building Arbitrary Values 800========================= 801 802This function is the counterpart to :c:func:`PyArg_ParseTuple`. It is declared 803as follows:: 804 805 PyObject *Py_BuildValue(const char *format, ...); 806 807It recognizes a set of format units similar to the ones recognized by 808:c:func:`PyArg_ParseTuple`, but the arguments (which are input to the function, 809not output) must not be pointers, just values. It returns a new Python object, 810suitable for returning from a C function called from Python. 811 812One difference with :c:func:`PyArg_ParseTuple`: while the latter requires its 813first argument to be a tuple (since Python argument lists are always represented 814as tuples internally), :c:func:`Py_BuildValue` does not always build a tuple. It 815builds a tuple only if its format string contains two or more format units. If 816the format string is empty, it returns ``None``; if it contains exactly one 817format unit, it returns whatever object is described by that format unit. To 818force it to return a tuple of size 0 or one, parenthesize the format string. 819 820Examples (to the left the call, to the right the resulting Python value): 821 822.. code-block:: none 823 824 Py_BuildValue("") None 825 Py_BuildValue("i", 123) 123 826 Py_BuildValue("iii", 123, 456, 789) (123, 456, 789) 827 Py_BuildValue("s", "hello") 'hello' 828 Py_BuildValue("y", "hello") b'hello' 829 Py_BuildValue("ss", "hello", "world") ('hello', 'world') 830 Py_BuildValue("s#", "hello", 4) 'hell' 831 Py_BuildValue("y#", "hello", 4) b'hell' 832 Py_BuildValue("()") () 833 Py_BuildValue("(i)", 123) (123,) 834 Py_BuildValue("(ii)", 123, 456) (123, 456) 835 Py_BuildValue("(i,i)", 123, 456) (123, 456) 836 Py_BuildValue("[i,i]", 123, 456) [123, 456] 837 Py_BuildValue("{s:i,s:i}", 838 "abc", 123, "def", 456) {'abc': 123, 'def': 456} 839 Py_BuildValue("((ii)(ii)) (ii)", 840 1, 2, 3, 4, 5, 6) (((1, 2), (3, 4)), (5, 6)) 841 842 843.. _refcounts: 844 845Reference Counts 846================ 847 848In languages like C or C++, the programmer is responsible for dynamic allocation 849and deallocation of memory on the heap. In C, this is done using the functions 850:c:func:`malloc` and :c:func:`free`. In C++, the operators ``new`` and 851``delete`` are used with essentially the same meaning and we'll restrict 852the following discussion to the C case. 853 854Every block of memory allocated with :c:func:`malloc` should eventually be 855returned to the pool of available memory by exactly one call to :c:func:`free`. 856It is important to call :c:func:`free` at the right time. If a block's address 857is forgotten but :c:func:`free` is not called for it, the memory it occupies 858cannot be reused until the program terminates. This is called a :dfn:`memory 859leak`. On the other hand, if a program calls :c:func:`free` for a block and then 860continues to use the block, it creates a conflict with re-use of the block 861through another :c:func:`malloc` call. This is called :dfn:`using freed memory`. 862It has the same bad consequences as referencing uninitialized data --- core 863dumps, wrong results, mysterious crashes. 864 865Common causes of memory leaks are unusual paths through the code. For instance, 866a function may allocate a block of memory, do some calculation, and then free 867the block again. Now a change in the requirements for the function may add a 868test to the calculation that detects an error condition and can return 869prematurely from the function. It's easy to forget to free the allocated memory 870block when taking this premature exit, especially when it is added later to the 871code. Such leaks, once introduced, often go undetected for a long time: the 872error exit is taken only in a small fraction of all calls, and most modern 873machines have plenty of virtual memory, so the leak only becomes apparent in a 874long-running process that uses the leaking function frequently. Therefore, it's 875important to prevent leaks from happening by having a coding convention or 876strategy that minimizes this kind of errors. 877 878Since Python makes heavy use of :c:func:`malloc` and :c:func:`free`, it needs a 879strategy to avoid memory leaks as well as the use of freed memory. The chosen 880method is called :dfn:`reference counting`. The principle is simple: every 881object contains a counter, which is incremented when a reference to the object 882is stored somewhere, and which is decremented when a reference to it is deleted. 883When the counter reaches zero, the last reference to the object has been deleted 884and the object is freed. 885 886An alternative strategy is called :dfn:`automatic garbage collection`. 887(Sometimes, reference counting is also referred to as a garbage collection 888strategy, hence my use of "automatic" to distinguish the two.) The big 889advantage of automatic garbage collection is that the user doesn't need to call 890:c:func:`free` explicitly. (Another claimed advantage is an improvement in speed 891or memory usage --- this is no hard fact however.) The disadvantage is that for 892C, there is no truly portable automatic garbage collector, while reference 893counting can be implemented portably (as long as the functions :c:func:`malloc` 894and :c:func:`free` are available --- which the C Standard guarantees). Maybe some 895day a sufficiently portable automatic garbage collector will be available for C. 896Until then, we'll have to live with reference counts. 897 898While Python uses the traditional reference counting implementation, it also 899offers a cycle detector that works to detect reference cycles. This allows 900applications to not worry about creating direct or indirect circular references; 901these are the weakness of garbage collection implemented using only reference 902counting. Reference cycles consist of objects which contain (possibly indirect) 903references to themselves, so that each object in the cycle has a reference count 904which is non-zero. Typical reference counting implementations are not able to 905reclaim the memory belonging to any objects in a reference cycle, or referenced 906from the objects in the cycle, even though there are no further references to 907the cycle itself. 908 909The cycle detector is able to detect garbage cycles and can reclaim them. 910The :mod:`gc` module exposes a way to run the detector (the 911:func:`~gc.collect` function), as well as configuration 912interfaces and the ability to disable the detector at runtime. 913 914 915.. _refcountsinpython: 916 917Reference Counting in Python 918---------------------------- 919 920There are two macros, ``Py_INCREF(x)`` and ``Py_DECREF(x)``, which handle the 921incrementing and decrementing of the reference count. :c:func:`Py_DECREF` also 922frees the object when the count reaches zero. For flexibility, it doesn't call 923:c:func:`free` directly --- rather, it makes a call through a function pointer in 924the object's :dfn:`type object`. For this purpose (and others), every object 925also contains a pointer to its type object. 926 927The big question now remains: when to use ``Py_INCREF(x)`` and ``Py_DECREF(x)``? 928Let's first introduce some terms. Nobody "owns" an object; however, you can 929:dfn:`own a reference` to an object. An object's reference count is now defined 930as the number of owned references to it. The owner of a reference is 931responsible for calling :c:func:`Py_DECREF` when the reference is no longer 932needed. Ownership of a reference can be transferred. There are three ways to 933dispose of an owned reference: pass it on, store it, or call :c:func:`Py_DECREF`. 934Forgetting to dispose of an owned reference creates a memory leak. 935 936It is also possible to :dfn:`borrow` [#]_ a reference to an object. The 937borrower of a reference should not call :c:func:`Py_DECREF`. The borrower must 938not hold on to the object longer than the owner from which it was borrowed. 939Using a borrowed reference after the owner has disposed of it risks using freed 940memory and should be avoided completely [#]_. 941 942The advantage of borrowing over owning a reference is that you don't need to 943take care of disposing of the reference on all possible paths through the code 944--- in other words, with a borrowed reference you don't run the risk of leaking 945when a premature exit is taken. The disadvantage of borrowing over owning is 946that there are some subtle situations where in seemingly correct code a borrowed 947reference can be used after the owner from which it was borrowed has in fact 948disposed of it. 949 950A borrowed reference can be changed into an owned reference by calling 951:c:func:`Py_INCREF`. This does not affect the status of the owner from which the 952reference was borrowed --- it creates a new owned reference, and gives full 953owner responsibilities (the new owner must dispose of the reference properly, as 954well as the previous owner). 955 956 957.. _ownershiprules: 958 959Ownership Rules 960--------------- 961 962Whenever an object reference is passed into or out of a function, it is part of 963the function's interface specification whether ownership is transferred with the 964reference or not. 965 966Most functions that return a reference to an object pass on ownership with the 967reference. In particular, all functions whose function it is to create a new 968object, such as :c:func:`PyLong_FromLong` and :c:func:`Py_BuildValue`, pass 969ownership to the receiver. Even if the object is not actually new, you still 970receive ownership of a new reference to that object. For instance, 971:c:func:`PyLong_FromLong` maintains a cache of popular values and can return a 972reference to a cached item. 973 974Many functions that extract objects from other objects also transfer ownership 975with the reference, for instance :c:func:`PyObject_GetAttrString`. The picture 976is less clear, here, however, since a few common routines are exceptions: 977:c:func:`PyTuple_GetItem`, :c:func:`PyList_GetItem`, :c:func:`PyDict_GetItem`, and 978:c:func:`PyDict_GetItemString` all return references that you borrow from the 979tuple, list or dictionary. 980 981The function :c:func:`PyImport_AddModule` also returns a borrowed reference, even 982though it may actually create the object it returns: this is possible because an 983owned reference to the object is stored in ``sys.modules``. 984 985When you pass an object reference into another function, in general, the 986function borrows the reference from you --- if it needs to store it, it will use 987:c:func:`Py_INCREF` to become an independent owner. There are exactly two 988important exceptions to this rule: :c:func:`PyTuple_SetItem` and 989:c:func:`PyList_SetItem`. These functions take over ownership of the item passed 990to them --- even if they fail! (Note that :c:func:`PyDict_SetItem` and friends 991don't take over ownership --- they are "normal.") 992 993When a C function is called from Python, it borrows references to its arguments 994from the caller. The caller owns a reference to the object, so the borrowed 995reference's lifetime is guaranteed until the function returns. Only when such a 996borrowed reference must be stored or passed on, it must be turned into an owned 997reference by calling :c:func:`Py_INCREF`. 998 999The object reference returned from a C function that is called from Python must 1000be an owned reference --- ownership is transferred from the function to its 1001caller. 1002 1003 1004.. _thinice: 1005 1006Thin Ice 1007-------- 1008 1009There are a few situations where seemingly harmless use of a borrowed reference 1010can lead to problems. These all have to do with implicit invocations of the 1011interpreter, which can cause the owner of a reference to dispose of it. 1012 1013The first and most important case to know about is using :c:func:`Py_DECREF` on 1014an unrelated object while borrowing a reference to a list item. For instance:: 1015 1016 void 1017 bug(PyObject *list) 1018 { 1019 PyObject *item = PyList_GetItem(list, 0); 1020 1021 PyList_SetItem(list, 1, PyLong_FromLong(0L)); 1022 PyObject_Print(item, stdout, 0); /* BUG! */ 1023 } 1024 1025This function first borrows a reference to ``list[0]``, then replaces 1026``list[1]`` with the value ``0``, and finally prints the borrowed reference. 1027Looks harmless, right? But it's not! 1028 1029Let's follow the control flow into :c:func:`PyList_SetItem`. The list owns 1030references to all its items, so when item 1 is replaced, it has to dispose of 1031the original item 1. Now let's suppose the original item 1 was an instance of a 1032user-defined class, and let's further suppose that the class defined a 1033:meth:`__del__` method. If this class instance has a reference count of 1, 1034disposing of it will call its :meth:`__del__` method. 1035 1036Since it is written in Python, the :meth:`__del__` method can execute arbitrary 1037Python code. Could it perhaps do something to invalidate the reference to 1038``item`` in :c:func:`bug`? You bet! Assuming that the list passed into 1039:c:func:`bug` is accessible to the :meth:`__del__` method, it could execute a 1040statement to the effect of ``del list[0]``, and assuming this was the last 1041reference to that object, it would free the memory associated with it, thereby 1042invalidating ``item``. 1043 1044The solution, once you know the source of the problem, is easy: temporarily 1045increment the reference count. The correct version of the function reads:: 1046 1047 void 1048 no_bug(PyObject *list) 1049 { 1050 PyObject *item = PyList_GetItem(list, 0); 1051 1052 Py_INCREF(item); 1053 PyList_SetItem(list, 1, PyLong_FromLong(0L)); 1054 PyObject_Print(item, stdout, 0); 1055 Py_DECREF(item); 1056 } 1057 1058This is a true story. An older version of Python contained variants of this bug 1059and someone spent a considerable amount of time in a C debugger to figure out 1060why his :meth:`__del__` methods would fail... 1061 1062The second case of problems with a borrowed reference is a variant involving 1063threads. Normally, multiple threads in the Python interpreter can't get in each 1064other's way, because there is a global lock protecting Python's entire object 1065space. However, it is possible to temporarily release this lock using the macro 1066:c:macro:`Py_BEGIN_ALLOW_THREADS`, and to re-acquire it using 1067:c:macro:`Py_END_ALLOW_THREADS`. This is common around blocking I/O calls, to 1068let other threads use the processor while waiting for the I/O to complete. 1069Obviously, the following function has the same problem as the previous one:: 1070 1071 void 1072 bug(PyObject *list) 1073 { 1074 PyObject *item = PyList_GetItem(list, 0); 1075 Py_BEGIN_ALLOW_THREADS 1076 ...some blocking I/O call... 1077 Py_END_ALLOW_THREADS 1078 PyObject_Print(item, stdout, 0); /* BUG! */ 1079 } 1080 1081 1082.. _nullpointers: 1083 1084NULL Pointers 1085------------- 1086 1087In general, functions that take object references as arguments do not expect you 1088to pass them ``NULL`` pointers, and will dump core (or cause later core dumps) if 1089you do so. Functions that return object references generally return ``NULL`` only 1090to indicate that an exception occurred. The reason for not testing for ``NULL`` 1091arguments is that functions often pass the objects they receive on to other 1092function --- if each function were to test for ``NULL``, there would be a lot of 1093redundant tests and the code would run more slowly. 1094 1095It is better to test for ``NULL`` only at the "source:" when a pointer that may be 1096``NULL`` is received, for example, from :c:func:`malloc` or from a function that 1097may raise an exception. 1098 1099The macros :c:func:`Py_INCREF` and :c:func:`Py_DECREF` do not check for ``NULL`` 1100pointers --- however, their variants :c:func:`Py_XINCREF` and :c:func:`Py_XDECREF` 1101do. 1102 1103The macros for checking for a particular object type (``Pytype_Check()``) don't 1104check for ``NULL`` pointers --- again, there is much code that calls several of 1105these in a row to test an object against various different expected types, and 1106this would generate redundant tests. There are no variants with ``NULL`` 1107checking. 1108 1109The C function calling mechanism guarantees that the argument list passed to C 1110functions (``args`` in the examples) is never ``NULL`` --- in fact it guarantees 1111that it is always a tuple [#]_. 1112 1113It is a severe error to ever let a ``NULL`` pointer "escape" to the Python user. 1114 1115.. Frank Stajano: 1116 A pedagogically buggy example, along the lines of the previous listing, would 1117 be helpful here -- showing in more concrete terms what sort of actions could 1118 cause the problem. I can't very well imagine it from the description. 1119 1120 1121.. _cplusplus: 1122 1123Writing Extensions in C++ 1124========================= 1125 1126It is possible to write extension modules in C++. Some restrictions apply. If 1127the main program (the Python interpreter) is compiled and linked by the C 1128compiler, global or static objects with constructors cannot be used. This is 1129not a problem if the main program is linked by the C++ compiler. Functions that 1130will be called by the Python interpreter (in particular, module initialization 1131functions) have to be declared using ``extern "C"``. It is unnecessary to 1132enclose the Python header files in ``extern "C" {...}`` --- they use this form 1133already if the symbol ``__cplusplus`` is defined (all recent C++ compilers 1134define this symbol). 1135 1136 1137.. _using-capsules: 1138 1139Providing a C API for an Extension Module 1140========================================= 1141 1142.. sectionauthor:: Konrad Hinsen <hinsen@cnrs-orleans.fr> 1143 1144 1145Many extension modules just provide new functions and types to be used from 1146Python, but sometimes the code in an extension module can be useful for other 1147extension modules. For example, an extension module could implement a type 1148"collection" which works like lists without order. Just like the standard Python 1149list type has a C API which permits extension modules to create and manipulate 1150lists, this new collection type should have a set of C functions for direct 1151manipulation from other extension modules. 1152 1153At first sight this seems easy: just write the functions (without declaring them 1154``static``, of course), provide an appropriate header file, and document 1155the C API. And in fact this would work if all extension modules were always 1156linked statically with the Python interpreter. When modules are used as shared 1157libraries, however, the symbols defined in one module may not be visible to 1158another module. The details of visibility depend on the operating system; some 1159systems use one global namespace for the Python interpreter and all extension 1160modules (Windows, for example), whereas others require an explicit list of 1161imported symbols at module link time (AIX is one example), or offer a choice of 1162different strategies (most Unices). And even if symbols are globally visible, 1163the module whose functions one wishes to call might not have been loaded yet! 1164 1165Portability therefore requires not to make any assumptions about symbol 1166visibility. This means that all symbols in extension modules should be declared 1167``static``, except for the module's initialization function, in order to 1168avoid name clashes with other extension modules (as discussed in section 1169:ref:`methodtable`). And it means that symbols that *should* be accessible from 1170other extension modules must be exported in a different way. 1171 1172Python provides a special mechanism to pass C-level information (pointers) from 1173one extension module to another one: Capsules. A Capsule is a Python data type 1174which stores a pointer (:c:type:`void \*`). Capsules can only be created and 1175accessed via their C API, but they can be passed around like any other Python 1176object. In particular, they can be assigned to a name in an extension module's 1177namespace. Other extension modules can then import this module, retrieve the 1178value of this name, and then retrieve the pointer from the Capsule. 1179 1180There are many ways in which Capsules can be used to export the C API of an 1181extension module. Each function could get its own Capsule, or all C API pointers 1182could be stored in an array whose address is published in a Capsule. And the 1183various tasks of storing and retrieving the pointers can be distributed in 1184different ways between the module providing the code and the client modules. 1185 1186Whichever method you choose, it's important to name your Capsules properly. 1187The function :c:func:`PyCapsule_New` takes a name parameter 1188(:c:type:`const char \*`); you're permitted to pass in a ``NULL`` name, but 1189we strongly encourage you to specify a name. Properly named Capsules provide 1190a degree of runtime type-safety; there is no feasible way to tell one unnamed 1191Capsule from another. 1192 1193In particular, Capsules used to expose C APIs should be given a name following 1194this convention:: 1195 1196 modulename.attributename 1197 1198The convenience function :c:func:`PyCapsule_Import` makes it easy to 1199load a C API provided via a Capsule, but only if the Capsule's name 1200matches this convention. This behavior gives C API users a high degree 1201of certainty that the Capsule they load contains the correct C API. 1202 1203The following example demonstrates an approach that puts most of the burden on 1204the writer of the exporting module, which is appropriate for commonly used 1205library modules. It stores all C API pointers (just one in the example!) in an 1206array of :c:type:`void` pointers which becomes the value of a Capsule. The header 1207file corresponding to the module provides a macro that takes care of importing 1208the module and retrieving its C API pointers; client modules only have to call 1209this macro before accessing the C API. 1210 1211The exporting module is a modification of the :mod:`spam` module from section 1212:ref:`extending-simpleexample`. The function :func:`spam.system` does not call 1213the C library function :c:func:`system` directly, but a function 1214:c:func:`PySpam_System`, which would of course do something more complicated in 1215reality (such as adding "spam" to every command). This function 1216:c:func:`PySpam_System` is also exported to other extension modules. 1217 1218The function :c:func:`PySpam_System` is a plain C function, declared 1219``static`` like everything else:: 1220 1221 static int 1222 PySpam_System(const char *command) 1223 { 1224 return system(command); 1225 } 1226 1227The function :c:func:`spam_system` is modified in a trivial way:: 1228 1229 static PyObject * 1230 spam_system(PyObject *self, PyObject *args) 1231 { 1232 const char *command; 1233 int sts; 1234 1235 if (!PyArg_ParseTuple(args, "s", &command)) 1236 return NULL; 1237 sts = PySpam_System(command); 1238 return PyLong_FromLong(sts); 1239 } 1240 1241In the beginning of the module, right after the line :: 1242 1243 #include <Python.h> 1244 1245two more lines must be added:: 1246 1247 #define SPAM_MODULE 1248 #include "spammodule.h" 1249 1250The ``#define`` is used to tell the header file that it is being included in the 1251exporting module, not a client module. Finally, the module's initialization 1252function must take care of initializing the C API pointer array:: 1253 1254 PyMODINIT_FUNC 1255 PyInit_spam(void) 1256 { 1257 PyObject *m; 1258 static void *PySpam_API[PySpam_API_pointers]; 1259 PyObject *c_api_object; 1260 1261 m = PyModule_Create(&spammodule); 1262 if (m == NULL) 1263 return NULL; 1264 1265 /* Initialize the C API pointer array */ 1266 PySpam_API[PySpam_System_NUM] = (void *)PySpam_System; 1267 1268 /* Create a Capsule containing the API pointer array's address */ 1269 c_api_object = PyCapsule_New((void *)PySpam_API, "spam._C_API", NULL); 1270 1271 if (PyModule_AddObject(m, "_C_API", c_api_object) < 0) { 1272 Py_XDECREF(c_api_object); 1273 Py_DECREF(m); 1274 return NULL; 1275 } 1276 1277 return m; 1278 } 1279 1280Note that ``PySpam_API`` is declared ``static``; otherwise the pointer 1281array would disappear when :func:`PyInit_spam` terminates! 1282 1283The bulk of the work is in the header file :file:`spammodule.h`, which looks 1284like this:: 1285 1286 #ifndef Py_SPAMMODULE_H 1287 #define Py_SPAMMODULE_H 1288 #ifdef __cplusplus 1289 extern "C" { 1290 #endif 1291 1292 /* Header file for spammodule */ 1293 1294 /* C API functions */ 1295 #define PySpam_System_NUM 0 1296 #define PySpam_System_RETURN int 1297 #define PySpam_System_PROTO (const char *command) 1298 1299 /* Total number of C API pointers */ 1300 #define PySpam_API_pointers 1 1301 1302 1303 #ifdef SPAM_MODULE 1304 /* This section is used when compiling spammodule.c */ 1305 1306 static PySpam_System_RETURN PySpam_System PySpam_System_PROTO; 1307 1308 #else 1309 /* This section is used in modules that use spammodule's API */ 1310 1311 static void **PySpam_API; 1312 1313 #define PySpam_System \ 1314 (*(PySpam_System_RETURN (*)PySpam_System_PROTO) PySpam_API[PySpam_System_NUM]) 1315 1316 /* Return -1 on error, 0 on success. 1317 * PyCapsule_Import will set an exception if there's an error. 1318 */ 1319 static int 1320 import_spam(void) 1321 { 1322 PySpam_API = (void **)PyCapsule_Import("spam._C_API", 0); 1323 return (PySpam_API != NULL) ? 0 : -1; 1324 } 1325 1326 #endif 1327 1328 #ifdef __cplusplus 1329 } 1330 #endif 1331 1332 #endif /* !defined(Py_SPAMMODULE_H) */ 1333 1334All that a client module must do in order to have access to the function 1335:c:func:`PySpam_System` is to call the function (or rather macro) 1336:c:func:`import_spam` in its initialization function:: 1337 1338 PyMODINIT_FUNC 1339 PyInit_client(void) 1340 { 1341 PyObject *m; 1342 1343 m = PyModule_Create(&clientmodule); 1344 if (m == NULL) 1345 return NULL; 1346 if (import_spam() < 0) 1347 return NULL; 1348 /* additional initialization can happen here */ 1349 return m; 1350 } 1351 1352The main disadvantage of this approach is that the file :file:`spammodule.h` is 1353rather complicated. However, the basic structure is the same for each function 1354that is exported, so it has to be learned only once. 1355 1356Finally it should be mentioned that Capsules offer additional functionality, 1357which is especially useful for memory allocation and deallocation of the pointer 1358stored in a Capsule. The details are described in the Python/C API Reference 1359Manual in the section :ref:`capsules` and in the implementation of Capsules (files 1360:file:`Include/pycapsule.h` and :file:`Objects/pycapsule.c` in the Python source 1361code distribution). 1362 1363.. rubric:: Footnotes 1364 1365.. [#] An interface for this function already exists in the standard module :mod:`os` 1366 --- it was chosen as a simple and straightforward example. 1367 1368.. [#] The metaphor of "borrowing" a reference is not completely correct: the owner 1369 still has a copy of the reference. 1370 1371.. [#] Checking that the reference count is at least 1 **does not work** --- the 1372 reference count itself could be in freed memory and may thus be reused for 1373 another object! 1374 1375.. [#] These guarantees don't hold when you use the "old" style calling convention --- 1376 this is still found in much existing code. 1377