J'ai essayé d'ajouter un module Python 3 en C

J'ai essayé de rendre un programme écrit en C utilisable depuis Python 3 Toutes les références sont anciennes et j'ai eu du mal à le rendre compatible avec Python3 ...

Tout d'abord, le code source

hello.c


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

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

C'est le code source C, qui a deux fonctions, ajouter et sortir.

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);
}

Ceci est le code source principal.

Voir ici pour la signification de chaque programme → Appeler un programme C depuis Python

Essayez de courir

compiler

Exécutez trois commandes.

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

Essayez de python3

Essayons-le, est-ce vraiment fait?

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")
Bonjour, je suis hnkz de hamamatsu.

C'est fait! Hou la la! !!

Je veux l'appliquer et créer un enregistreur de frappe avec Python3.

Les références

Appeler un programme C depuis Python J'ai essayé la liaison C en Python Compiler can't find Py_InitModule() .. is it deprecated and if so what should I use?

Recommended Posts

J'ai essayé d'ajouter un module Python 3 en C
J'ai essayé de jouer à un jeu de frappe avec Python
J'ai essayé l'extension C de Python
Essayez de créer un module Python en langage C
J'ai essayé d'implémenter un pseudo pachislot en Python
ABC166 en Python A ~ C problème
Résoudre ABC036 A ~ C avec Python
J'ai fait un module en langage C qui filtre les images chargées par Python
Résoudre ABC037 A ~ C avec Python
J'ai essayé la notification de ligne en Python
J'ai essayé d'implémenter un automate cellulaire unidimensionnel en Python
J'ai essayé "un programme qui supprime les déclarations en double en Python"
J'ai créé une classe en Python et essayé de taper du canard
J'ai fait un chronomètre en utilisant tkinter avec python
J'ai essayé d'implémenter PLSA en Python
Résoudre ABC175 A, B, C avec Python
J'ai essayé d'implémenter la permutation en Python
J'ai essayé d'implémenter PLSA dans Python 2
J'ai essayé d'utiliser l'optimisation bayésienne de Python
J'ai essayé d'implémenter ADALINE en Python
J'ai essayé d'implémenter PPO en Python
J'ai créé un outil de mot de passe en Python.
J'ai essayé de mettre en œuvre un jeu de dilemme de prisonnier mal compris en Python
Un mémo que j'ai écrit un tri rapide en Python
Créer un module Python
J'ai essayé de simuler "Birthday Paradox" avec Python
J'ai essayé la méthode des moindres carrés en Python
J'ai écrit une classe en Python3 et Java
Next Python en langage C
J'ai essayé d'implémenter TOPIC MODEL en Python
J'ai essayé de lire un fichier CSV en utilisant Python
J'ai essayé de développer un formateur qui génère des journaux Python en JSON
Pour ajouter un module à python que vous mettez dans Julialang
J'ai essayé d'utiliser le module Datetime de Python
J'ai essayé le comportement d'E / S Eventlet non bloquant en Python
Appel de scripts Python à partir de Python intégré en C ++ / C ++
Une histoire qui n'a pas fonctionné lorsque j'ai essayé de me connecter avec le module de requêtes Python
API C en Python 3
J'ai essayé d'exécuter alembic, un outil de migration pour Python
J'ai essayé d'implémenter le tri sélectif en python
J'ai essayé Python> décorateur
J'ai essayé d'implémenter le jeu de cartes de Trump en Python
J'ai créé un programme cryptographique César en Python.
J'ai essayé de créer une classe qui peut facilement sérialiser Json en Python
J'ai essayé d'implémenter ce qui semble être un outil de snipper Windows avec Python
Dessine un graphique avec Julia ... j'ai essayé une petite analyse
J'ai essayé de représenter graphiquement les packages installés en Python
Je souhaite intégrer une variable dans une chaîne Python
Je veux facilement implémenter le délai d'expiration en python
J'ai essayé d'utiliser google test et CMake en C
Je veux écrire en Python! (2) Écrivons un test
J'ai essayé d'exécuter python à partir d'un fichier chauve-souris
Essayez d'incorporer Python dans un programme C ++ avec pybind11
J'ai créé un module Python pour traduire les commentaires
Je veux échantillonner au hasard un fichier avec Python
J'ai essayé d'implémenter le poker de Drakue en Python
Je veux travailler avec un robot en python.
J'ai essayé d'implémenter GA (algorithme génétique) en Python