Ich habe die erste Hälfte der Python-Erweiterung des Tutorials mit C und C ++ kopiert. Ich dachte daran, Cython zu studieren, aber ich sah zufällig einen Blog-Beitrag über die oben genannte Methode, also wollte ich es versuchen. Ich habe den Eindruck, dass es nicht so schwierig sein wird. Ich kenne die API noch nicht. .. Wirklich quietschen spammodule.c wie es im Tutorial ist. Fügen Sie die Kommentare so ein, wie sie im Text des Tutorials enthalten sind.
spammodule.c
#include <Python.h>
static PyObject *
spam_system(PyObject *self, PyObject *args)
{
const char *command;
int sts;
if (!PyArg_ParseTuple(args, "s", &command))
/*Zeigen Sie auf eine Zeichenfolge, eine Python-Zeichenfolge oder ein Unicode-Objekt
In C-Zeiger konvertieren. "s"Bedeutung von
*/
return NULL;
sts = system(command);
return Py_BuildValue("i", sts);
/*Ein neues Python-Objekt, das eine formatierte Zeichenfolge und eine beliebige Anzahl von C-Werten als Argumente verwendet
Gib es zurück. "i"Bedeutet ein ganzzahliges Objekt*/
}
static PyMethodDef SpamMethods[] = {
{"system", spam_system, METH_VARARGS,
"Beschreibung Führen Sie einen Shell-Befehl aus."},
{NULL, NULL, 0, NULL}
};
PyMODINIT_FUNC
initspam(void)
{
(void) Py_InitModule("spam", SpamMethods);
}
Erstellen Sie nach dem sicheren Schreiben die Datei setup.py wie folgt.
Ich habe auf diesen Artikel verwiesen.
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])
Der Rest ist in der Kommandozeile
$python setup.py build
(Diesmal ist es ein Experiment, daher werde ich es nicht installieren.) Ausführen. Dann wird ein Verzeichnis namens build direkt unter dem aktuellen erstellt. Ich denke, dass der Inhalt je nach Umgebung unterschiedlich ist, aber wenn Sie den Pfad von spam.so angeben und importieren Es scheint, dass es verwendet werden kann. Ich habe spam.so kopiert und in ein geeignetes Verzeichnis eingefügt (Ist es in Ordnung?) Es war ein passendes Memo.
Recommended Posts