Rufen Sie die c-Sprache von Python aus auf (python.h)

Einführung

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.

Methode

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.

Python-Version

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.

Über das Beispielprogramm

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)

Beispielprogramm

・ 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.)

Nachtrag

○ 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 20180306_1.JPG

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

abschließend

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

Rufen Sie die c-Sprache von Python aus auf (python.h)
Rufen Sie C von Python mit DragonFFI auf
Rufen Sie popcount von Ruby / Python / C # auf
Rufen Sie C / C ++ von Python auf dem Mac auf
Rufen Sie C-Sprachfunktionen von Python auf, um mehrdimensionale Arrays auszutauschen
Generieren Sie mit Python eine C-Sprache aus dem S-Ausdruck
Rufen Sie mit ctypes Ihre eigene gemeinsam genutzte Bibliothek in C-Sprache von Python aus auf
Rufen Sie Python-Skripte aus Embedded Python in C ++ / C ++ auf
C-Sprache zum Sehen und Erinnern Teil 1 Rufen Sie die C-Sprache aus Python auf (Hallo Welt)
C-Sprache zum Anzeigen und Erinnern Teil 4 Rufen Sie die C-Sprache von Python (Argument) double auf
C-Sprache zum Anzeigen und Erinnern Teil 5 Rufen Sie die C-Sprache aus dem Python-Array (Argument) auf
Rufen Sie CPLEX von Python aus auf (DO cplex)
[Python] So rufen Sie eine Funktion von c aus Python auf (ctypes edition)
C-Sprache zum Sehen und Erinnern Teil 3 Rufen Sie die C-Sprache aus Python auf (Argument) c = a + b
Rufen Sie Matlab von Python zur Optimierung auf
Einführung in Protobuf-c (C-Sprache ⇔ Python)
Tipps zum Aufrufen von Python von C.
Führen Sie Python-Code über die C # -GUI aus
Führen Sie Python-Skripte synchron von C # aus
Rufen Sie Python von Nim mit Nimpy auf
Gehen Sie zur Sprache, um Teil 8 zu sehen und sich daran zu erinnern. Rufen Sie die GO-Sprache von Python aus auf
4-Sprachen-Vergleich des Abschlusses (Python, JavaScript, Java, C ++)
Verwenden von C ++ - Funktionen aus Python mit pybind11
Aufrufbefehle von Python (Windows Edition)
SQL zu SQL
Python C ++ Notizen
Python, openFrameworks (c ++)
MeCab von Python
Erstellen Sie ein C-Array aus einer Python> Excel-Tabelle
Schreiben von Protokollen in eine CSV-Datei (Python, C-Sprache)
Wickeln Sie C mit Cython für Python ein
Rufen Sie die Python-Bibliothek zur Textnormalisierung in MATLAB auf
Wrap C ++ mit Cython zur Verwendung von Python
Ich möchte C ++ - Code aus Python-Code erstellen!
Rufen Sie Polly aus dem AWS SDK für Python auf
Eine einfache Möglichkeit, Java von Python aus aufzurufen
Berühren Sie MySQL in Python 3
Bedienen Sie Filemaker von Python aus
Versuchen Sie, ein Python-Modul in C-Sprache zu erstellen
Python: Verarbeitung natürlicher Sprache
Python C / C ++ - Erweiterungsmusterzeiger
Greifen Sie über Python auf Bitcoind zu
Änderungen von Python 3.0 zu Python 3.5
Änderungen von Python 2 zu Python 3.0
Python aus oder importieren
Rufen wir Ihre eigene C ++ - Bibliothek mit Python auf (Einstellungen)
C-Sprache ALDS1_3_B Warteschlange
Verwenden Sie MySQL aus Python
Führen Sie Python aus Excel aus
Einführung in die Python-Sprache
Führen Sie Befehle aus Python aus
Python zeigt aus der Perspektive eines C-Sprachprogrammierers
Weiter Python in C-Sprache
Verwenden Sie MySQL aus Python
Betreiben Sie LXC von Python aus
Manipuliere Riak aus Python
Erzwinge Python aus Fortran
Rufen Sie Ihr eigenes Python-Modul aus dem ROS-Paket auf
Verwenden Sie BigQuery aus Python.
[C-Sprachalgorithmus] Endianness