Ich habe versucht, ein Python 3-Modul in C hinzuzufügen

Ich habe versucht, ein in C geschriebenes Programm von Python 3 aus nutzbar zu machen Alle Referenzen sind alt und es fiel mir schwer, sie mit Python3 kompatibel zu machen ...

Zunächst der Quellcode

hello.c


int add(int x, int y)
{
	return x + y;
}

void out(const char* adrs, const char* name)
{
	printf("Hallo ich%s%s.\n", adrs, name);
}

Dies ist der C-Quellcode, der zwei Funktionen hat, add und out.

helloWrapper.c


#include "Python.h"
extern int add(int, int);
extern void out(const char*, const char*);

PyObject* hello_add(PyObject* self, PyObject* args)
{
	int x, y, g;

	if (!PyArg_ParseTuple(args, "ii", &x, &y))
		return NULL;
	g = add(x, y);
	return Py_BuildValue("i", g);
}

PyObject* hello_out(PyObject* self, PyObject* args, PyObject* kw)
{
	const char* adrs = NULL;
	const char* name = NULL;
	static char* argnames[] = {"adrs", "name", NULL};

	if (!PyArg_ParseTupleAndKeywords(args, kw, "|ss",
			argnames, &adrs, &name))
		return NULL;
	out(adrs, name);
	return Py_BuildValue("");
}

static PyMethodDef hellomethods[] = {
	{"add", hello_add, METH_VARARGS},
	{"out", hello_out, METH_VARARGS | METH_KEYWORDS},
	{NULL}
};

static struct PyModuleDef hellomodule =
{
    PyModuleDef_HEAD_INIT,
    "hellomodule", /* name of module */
    "",            /* module documentation, may be NULL */
    -1,            /* size of per-interpreter state of the module, or -1 if the module keeps state in global variables. */
    hellomethods
};

PyMODINIT_FUNC PyInit_hellomodule(void)
{
    return PyModule_Create(&hellomodule);
}

Dies ist der Hauptquellcode.

Hier finden Sie die Bedeutung der einzelnen Programme → Rufen Sie ein C-Programm von Python aus auf

Versuche zu rennen

kompilieren

Führen Sie drei Befehle aus.

gcc -fpic -o hello.o -c hello.c
gcc -fpic -I`python3-config --prefix`/Headers -o helloWrapper.o -c helloWrapper.c
gcc -L`python3-config --prefix`/lib -lpython3.5 -shared hello.o helloWrapper.o -o hellomodule.so

Versuchen Sie es mit Python3

Probieren wir es aus, ist es wirklich fertig?

hnkz $ python3
Python 3.5.2 (v3.5.2:4def2a2901a5, Jun 26 2016, 10:47:25)
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import hellomodule
>>> hellomodule.add(2,3)
5
>>> hellomodule.out("hamamatsu","hnkz")
Hallo, ich bin hnkz von hamamatsu.

Es ist fertig! Beeindruckend! !!

Ich möchte es anwenden und einen Schlüssellogger mit Python3 erstellen.

Verweise

Rufen Sie ein C-Programm aus Python auf Ich habe versucht, C in Python zu binden Compiler can't find Py_InitModule() .. is it deprecated and if so what should I use?

Recommended Posts

Ich habe versucht, ein Python 3-Modul in C hinzuzufügen
Ich habe versucht, mit Python ein Tippspiel zu spielen
Ich habe die C-Erweiterung von Python ausprobiert
Versuchen Sie, ein Python-Modul in C-Sprache zu erstellen
Ich habe versucht, einen Pseudo-Pachislot in Python zu implementieren
ABC166 in Python A ~ C Problem
Löse ABC036 A ~ C mit Python
Ich habe ein Modul in C-Sprache erstellt, das von Python geladene Bilder filtert
Löse ABC037 A ~ C mit Python
Ich habe Line Benachrichtigung in Python versucht
Ich habe versucht, einen eindimensionalen Zellautomaten in Python zu implementieren
Ich habe versucht, "ein Programm, das doppelte Anweisungen in Python entfernt"
Ich habe eine Klasse in Python erstellt und versucht, Enten zu tippen
Ich habe eine Stoppuhr mit tkinter mit Python gemacht
Ich habe versucht, PLSA in Python zu implementieren
Löse ABC175 A, B, C mit Python
Ich habe versucht, Permutation in Python zu implementieren
Ich habe versucht, PLSA in Python 2 zu implementieren
Ich habe versucht, die Bayes'sche Optimierung von Python zu verwenden
Ich habe versucht, ADALINE in Python zu implementieren
Ich habe versucht, PPO in Python zu implementieren
Ich habe ein Passwort-Tool in Python erstellt.
Ich habe versucht, ein missverstandenes Gefangenendilemma in Python zu implementieren
Ein Memo, das ich schnell in Python geschrieben habe
Erstellen Sie ein Python-Modul
Ich habe versucht, "Birthday Paradox" mit Python zu simulieren
Ich habe die Methode der kleinsten Quadrate in Python ausprobiert
Ich habe eine Klasse in Python3 und Java geschrieben
Weiter Python in C-Sprache
Ich habe versucht, TOPIC MODEL in Python zu implementieren
Ich habe versucht, eine CSV-Datei mit Python zu lesen
Ich habe versucht, einen Formatierer zu entwickeln, der Python-Protokolle in JSON ausgibt
So fügen Sie Python ein Modul hinzu, das Sie in Julialang eingefügt haben
Ich habe versucht, das Datetime-Modul von Python zu verwenden
Ich habe versucht, das Verhalten von E / A-Eventlets in Python nicht zu blockieren
Rufen Sie Python-Skripte aus Embedded Python in C ++ / C ++ auf
Eine Geschichte, die nicht funktioniert hat, als ich versucht habe, mich mit dem Python-Anforderungsmodul anzumelden
C-API in Python 3
Ich habe versucht, alembic auszuführen, ein Migrationstool für Python
Ich habe versucht, eine selektive Sortierung in Python zu implementieren
Ich habe Python> Decorator ausprobiert
Ich habe versucht, Trumps Kartenspiel in Python zu implementieren
Ich habe ein Caesar-Kryptografieprogramm in Python erstellt.
Ich habe versucht, eine Klasse zu erstellen, mit der Json in Python problemlos serialisiert werden kann
Ich habe versucht, ein scheinbar Windows-Snipper-Tool mit Python zu implementieren
Zeichne ein Diagramm mit Julia ... Ich habe eine kleine Analyse versucht
Ich habe versucht, die in Python installierten Pakete grafisch darzustellen
Ich möchte eine Variable in einen Python-String einbetten
Ich möchte Timeout einfach in Python implementieren
Ich habe versucht, Google Test und CMake in C zu verwenden
Ich möchte in Python schreiben! (2) Schreiben wir einen Test
Ich habe versucht, Python aus einer Bat-Datei auszuführen
Versuchen Sie, Python mit pybind11 in ein C ++ - Programm einzubetten
Ich habe ein Python-Modul erstellt, um Kommentare zu übersetzen
Ich möchte eine Datei mit Python zufällig testen
Ich habe versucht, Drakues Poker in Python zu implementieren
Ich möchte mit einem Roboter in Python arbeiten.
Ich habe versucht, GA (genetischer Algorithmus) in Python zu implementieren