J'ai copié la première moitié de l'extension du tutoriel de Python avec C et C ++. Je pensais étudier Cython, mais il m'est arrivé de voir un article de blog sur la méthode ci-dessus, alors j'ai eu envie de l'essayer. J'ai l'impression que ce ne sera pas si difficile. Je ne connais pas encore l'API ou quoi que ce soit. .. Vraiment grincer spammodule.c comme dans le tutoriel. Collez les commentaires tels qu'ils sont dans le texte du didacticiel.
spammodule.c
#include <Python.h>
static PyObject *
spam_system(PyObject *self, PyObject *args)
{
const char *command;
int sts;
if (!PyArg_ParseTuple(args, "s", &command))
/*Pointez sur une chaîne de caractères, une chaîne Python ou un objet Unicode
Convertir en pointeur C. "s"Sens de
*/
return NULL;
sts = system(command);
return Py_BuildValue("i", sts);
/*Un nouvel objet Python qui prend une chaîne formatée et un nombre quelconque de valeurs C comme arguments
rends le. "i"Signifie un objet entier*/
}
static PyMethodDef SpamMethods[] = {
{"system", spam_system, METH_VARARGS,
"Description Exécuter une commande shell."},
{NULL, NULL, 0, NULL}
};
PyMODINIT_FUNC
initspam(void)
{
(void) Py_InitModule("spam", SpamMethods);
}
Après avoir écrit en toute sécurité, créez setup.py comme suit.
J'ai fait référence à cet article .
setup.py
from distutils.core import setup, Extension
module1 = Extension('spam',
sources = ['spammodule.c'])
setup (name = 'Spam',
version = '1.0',
description = 'This is a spam package',
ext_modules = [module1])
Le reste est sur la ligne de commande
$python setup.py build
(Cette fois c'est une expérience, donc je ne vais pas l'installer) Éxécuter. Ensuite, un répertoire appelé build sera créé directement sous le fichier courant. Je pense que le contenu diffère selon l'environnement, mais si vous spécifiez le chemin de spam.so et l'importez Il semble qu'il puisse être utilisé. J'ai copié et collé spam.so dans un répertoire approprié (est-ce que ça va?) C'était un mémo approprié.
Recommended Posts