Python C API
Un article de Haypo.
Retour aux langages de programmation
Python C API est la bibliothèque utilisée pour écrire des modules Python en C, c'est-à-dire pour CPython, l'implémentation Python standard. Personnelement, je préfère écrire des modules avec ctypes.
Lire la documentation Python C API de référence.
[modifier] Types
- PyString_FromString(const char *str) : crée un objet PyString à partir d'une chaîne C
[modifier] PyArg_ParseTuple()
- Prototype : PyArg_ParseTuple(args, "format", ...)
- Format : "entrée:sortie"
- "i" : entier
- "s" : chaîne de caractère => char*
- "s#" : chaîne de caractère et longueur => (char*, int)
- "S" : chaîne de caractère sous forme d'objet PyString => PyStringObject*
- "O" : objet Python => PyObject*
- Exemple :
int x; if (!PyArg_ParseTuple(args, "i", &x)) return NULL;
[modifier] Ajouter une fonction à un module
Squelette d'un module, exemple avec le module « crypto » de pyopenssl :
#define crypto_MODULE
static char crypto_doc[] = "...";
static char crypto_X509_verify_cert_error_string_doc[] = "(...)";
static PyObject *
crypto_X509_verify_cert_error_string(PyObject *spam, PyObject *args)
{
...
}
static PyMethodDef crypto_methods[] = {
...
{ "X509_verify_cert_error_string",
(PyCFunction)crypto_X509_verify_cert_error_string,
METH_VARARGS,
crypto_X509_verify_cert_error_string_doc },
{ NULL, NULL }
};
void
initcrypto(void)
{
if ((module = Py_InitModule3("crypto", crypto_methods, crypto_doc)) == NULL)
return;
}
Pour ajouter une fonction, il faut modifier crypto_methods et ajouter une ligne. La fonction ajoutée, ici crypto_X509_verify_cert_error_string, reçoit NULL en premier argument.

