Vor ungefähr einem halben Monat kam eine Datei heraus, die das Wrapper-Modul von python.h zusammenfasst, also werde ich sie veröffentlichen. Es wurde übrigens für Himbeer-Pi3 erstellt.
Die C-Sprache hat einen Header namens python.h, der für die Implementierung verwendet werden kann. Das Programm erstellt eine Funktion in der Sprache c und ruft die Funktion in Python von einem Wrapper-Modul namens Python-Wrapper auf.
In Python2 und 3 war es anders als ich es mir vorgestellt hatte, daher werde ich die Erstellungsmethode für jeden veröffentlichen. Es gibt keinen Unterschied in den c-Sprachfunktionen.
Selbst wenn Sie sich das Beispielprogramm ansehen, sehen Sie "Was? Was ist das?" .. .. Lol Ich werde das, was ich als zusätzliche Notiz verstanden habe, am Ende so weit wie möglich aufschreiben. Ich hoffe, Sie werden es sehen, wenn Sie interessiert sind, nachdem Sie das Beispielprogramm gesehen haben. Auch die Umgebung ist diesmal Himbeer pi3. Funktionen und Wrapper-Module sind separate Dateien. (Die gleiche Datei ist immer einfacher)
・ C Sprachfunktion
#include <iostream>
void numPrint(int num){
std::cout << num << std::endl
}
kompilieren $ g++ -Wall -pthread -fpic -o intPrint.o -c intPrint.cpp -lpigpiod_if2 -lrt
・ Python2.7
#include <Python.h>
extern void numPrint(int num);
PyObject *numPrint(PyObject* self, PyObject* args){
int num;
if(!PyArg_ParseTuple(args, "i", &num)) return NULL;
numPrint(num);
return Py_Buildvalue("");
}
static PyMethodDef numPrintmethods[]={
{"numPrint",numPrint ,METH_VARARGS},
{NULL,NULL,0},
};
PyMODINIT_FUNC initPWM(void){
Py_InitModule("numPrint",numPrintmethods);
}
kompilieren $ g++ -fpic -I/usr/include/python2.7 -o intPrintWrapper.o -c intPrintWrapper.cpp -lpigpiod_if2 -lrt $ g++ -shared intPrint.o intPrintWrapper.o -o intPrintmodule.so -lpigpiod_if2 –lrt
・ Python3.4
#include <Python.h>
#include <cstdio>
extern void numPrint(int num);
PyObject *numPrint(PyObject* self, PyObject* args){
int num;
if(!PyArg_ParseTuple(args, "i", &num)) return NULL;
numPrint(num);
return Py_Buildvalue("");
}
static PyMethodDef numPrintmethods[]={
{"numPrint",numPrint ,METH_VARARGS ,NULL},
{NULL,NULL, 0, NULL},
};
static PyModuleDef numPrintmodule = {
PyModuleDef_HEAD_INIT,
"numPrint",
NULL,
-1,
numPrintmethods
};
PyMODINIT_FUNC PyInit_numPrint(void){
return PyModule_Create(&numPrintmodule);
}
kompilieren $ arm-linux-gnueabihf-gcc -pthread -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -g -fstack-protector-strong -Wformat -Werror=format-security -D_FORTIFY_SOURCE=2 -fPIC -I/usr/include/python3.4m -c intPrintWrapper.cpp -o intPrintWrapper.o $ arm-linux-gnueabihf-g++ -pthread -shared intPrint.o -Wl,-O1 -Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,-z,relro -g -fstack-protector-strong -Wformat -Werror=format-security -D_FORTIFY_SOURCE=2 intPrintWrapper.o -o intPrint.cpython-34m.so -lpigpiod_if2 -lrt (* Ich denke, einige davon sind unnötig. ・ Achten Sie auf den Dateinamen und den Ordner.)
○ Zugabe ・ Einfaches Inhaltsverzeichnis Über PyObject / Über PyModuleDef / Das Modul an anderer Stelle verfügbar machen / In derselben Datei implementieren / In Klasse implementieren /
● Über PyObject PyObject hat sich in der Python-Version nicht geändert (glaube ich)
-In diesem Artikel gibt es nur ein Argument, in anderen Fällen jedoch Ohne Argumente
PyObject *numPrint(PyObject* self, PyObject* args){
numPrint();
return Py_Buildvalue("");
}
Zwei Argumente
PyObject *numPrint(PyObject* self, PyObject* args){
int num, num2;
if(!PyArg_ParseTuple(args, "ii", &num, &num2)) return NULL;
numPrint(num, num2);
return Py_Buildvalue("");
}
Es wird.
・ Über Argumente
if(!PyArg_ParseTuple(args, “ii”, &num, &num2)) return NULL; "Ii" ist ein Zustand, in dem es zwei Argumente vom Typ int in der Sprache c gibt.
・ Über den Rückgabewert Der Rückgabewert kann durch Rückgabe zurückgegeben werden.
● Machen Sie das Modul an anderen Stellen verwendbar (Ordner verschieben) $ sudo mv intPrint.cpython-34m.so /usr/local/lib/python3.4/dist-packages/ intPrint.cpython-34m.so
● Implementierung in derselben Datei Sie können. Ich habe es nicht getan
● Implementierung im Unterricht Sie können. Ich habe es nicht getan
Als ich das Wrapper-Modul selbst untersuchte, konnte ich es nicht in einer separaten Datei finden, also poste ich es. Erstens denke ich, dass es selten ist, eine separate Datei mit python.h zu erstellen (lacht)
Zum Schluss vielen Dank, dass Sie so weit gelesen haben. Ich hoffe es hilft jemandem auch nur ein bisschen.
Recommended Posts