Table des matières
Initialiser l'interpréteur Python
Exécuter un simple script ou instruction Python
Appelez la fonction Python et obtenez la valeur de retour
Questions et précautions fréquemment posées
Maison développement back-end C++ Comment appeler Python de C?

Comment appeler Python de C?

Jul 08, 2025 am 12:40 AM
python c++

Pour appeler le code Python en C, vous devez d'abord initialiser l'interprète, puis vous pouvez réaliser l'interaction en exécutant des chaînes, des fichiers ou en appelant des fonctions spécifiques. 1. Utilisez py_initialize () pour initialiser l'interpréteur et fermez-le avec py_finalalize (); 2. Utilisez pyrun_simplestring pour exécuter le code de chaîne ou pyrun_simplefile pour exécuter des fichiers de script; 3. Importez le module via pyimport_importmodule, obtenez la fonction via pyObject_getattrstring, construisez des paramètres de py_buildvalue, appelez la fonction via pyObject_Callobject et traitez la valeur de retour; 4. Faites attention à la correspondance des versions, au réglage du chemin, à la gestion du nombre de références et à la vérification des exceptions. L'ensemble du processus est clairement structuré mais nécessite une manipulation minutieuse des erreurs et de la gestion des ressources.

Comment appeler Python de C?

Appeler le code Python à partir des programmes C n'est pas vraiment mystérieux. La clé est d'utiliser l'API C fournie par Python. Tant qu'il est configuré correctement, vous pouvez créer des interprètes, exécuter des scripts et même passer des paramètres dans C.

Comment appeler Python de C?

Initialiser l'interpréteur Python

Pour appeler Python en C, la première étape consiste à initialiser l'interpréteur Python. Cette étape est nécessaire, sinon les opérations ultérieures échoueront.

Comment appeler Python de C?
  • Utilisez Py_Initialize() pour démarrer l'interprète
  • N'oubliez pas d'appeler Py_Finalize() après utilisation pour libérer la ressource
  • Si votre programme peut être initialisé et fermé plusieurs fois, vous devez prêter attention aux problèmes de sécurité des fils (Python ne prend pas en charge l'intégration multi-thread par défaut)

Exemple d'extrait de code:

 #include <python.h>

int main () {
    Py_initialize ();
    // ... le code qui appelle python py_finalalize ();
    retour 0;
}

Remarque: vous devez lier les bibliothèques Python lors de la compilation, comme l'utilisation du paramètre -lpython3.10 (la version spécifique dépend de la version Python que vous avez installée).

Comment appeler Python de C?

Exécuter un simple script ou instruction Python

Une fois l'initialisation terminée, vous pouvez directement exécuter un morceau de code de chaîne Python, tel que l'impression d'une phrase ou la définition d'une fonction.

  • L'utilisation PyRun_SimpleString est le moyen le plus simple
  • Il convient à l'exécution de certaines instructions qui ne nécessitent pas de valeur de retour

Par exemple:

 Pyrun_simplestring ("print (&#39;bonjour de python!&#39;)");

Si vous souhaitez aller plus loin, comme l'exécution d'un fichier .py , vous pouvez le faire:

 File * fp = fopen ("script.py", "r");
if (fp) {
    Pyrun_simplefile (fp, "script.py");
    fclose (FP);
}

Cette méthode convient aux situations lorsque vous souhaitez charger l'intégralité du fichier de script, mais faites attention si le chemin est correct et si le fichier est lisible.


Appelez la fonction Python et obtenez la valeur de retour

Si vous souhaitez appeler une fonction Python spécifique et obtenir sa valeur de retour, vous avez besoin d'une opération légèrement plus compliquée.

Les étapes sont les suivantes:

  • Module d'importation: utilisez PyImport_ImportModule
  • Get Function Object: Utilisez PyObject_GetAttrString
  • Construire des paramètres: créer des tuple ou d'autres types à l'aide de Py_BuildValue
  • Fonction d'appel: utilisez PyObject_CallObject
  • Traitez la valeur de retour: vérifiez si elle est nul, puis extraire la valeur réelle

Par exemple, supposons qu'il existe un fichier appelé math_utils.py , avec une fonction appelée add :

 # math_utils.py
def add (a, b):
    retour AB

C l'appelle comme suit:

 PyObject * pmodule = pyimport_importmodule ("math_utils");
PyObject * pfunc = pyObject_getAtTrString (pmodule, "add");

PyObject * pargs = pytuple_pack (2, pylong_fromlong (3), pylong_fromlong (4));
PyObject * Presult = pyObject_CalloBject (pfunc, pargs);

Résultat long = pylong_aslong (Presult);
// Résultat == 7

Ce processus est assez lourd, mais la structure est claire. La clé consiste à gérer les vérifications des erreurs à chaque étape, telles que déterminer si pModule est nul pour éviter les collisions.


Questions et précautions fréquemment posées

  • Python Version correspondant : assurez-vous que votre environnement de compilation C est lié à la bonne version Python, sinon des problèmes de compatibilité peuvent se produire.
  • Paramètres de chemin : si le script Python n'est pas dans le répertoire actuel, vous devrez peut-être définir le chemin de recherche via PySys_SetPath .
  • Gestion du nombre de références : Python utilise le mécanisme de comptage de référence, n'oubliez pas d'augmenter ou de diminuer les références de manière appropriée pour éviter les fuites de mémoire.
  • Gestion des exceptions : il est préférable de vérifier si des exceptions se produisent après chaque appel à l'API Python. Vous pouvez utiliser PyErr_Occurred() pour juger.

Fondamentalement, c'est tout. Bien que cela semble un peu gênant, tant que vous suivez le processus étape par étape, vous pouvez mettre en œuvre avec succès la fonction de C appelant Python.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Tutoriel PHP
1535
276
Comment corriger MSVCP71.dll dans votre ordinateur? Il n'y a que trois méthodes requises Comment corriger MSVCP71.dll dans votre ordinateur? Il n'y a que trois méthodes requises Aug 14, 2025 pm 08:03 PM

L'ordinateur invite "MSVCP71.DLL est absent de l'ordinateur", ce qui est généralement dû au fait que le système manque de composants en cours d'exécution, ce qui fait que le logiciel ne charge pas normalement. Cet article analysera profondément les fonctions du fichier et la cause profonde de l'erreur, et fournira trois solutions efficaces pour vous aider à restaurer rapidement le programme à exécuter. 1. Qu'est-ce que msvcp71.dll? MSVCP71.DLL appartient au fichier de bibliothèque d'exécution de base de Microsoft Visualc 2003 et appartient au type de bibliothèque de liens dynamiques (DLL). Il est principalement utilisé pour prendre en charge les programmes écrits en C pour appeler les fonctions standard, les modèles STL et les modules de traitement de base de données. De nombreuses applications et jeux classiques développés au début des années 2000 reposent sur ce fichier à exécuter. Une fois le fichier manquant ou corrompu,

C Exemple de surcharge de l'opérateur C Exemple de surcharge de l'opérateur Aug 15, 2025 am 10:18 AM

La surcharge de l'opérateur en C permet d'attribuer de nouveaux comportements des opérateurs standard aux types personnalisés, 1. Renvoie de nouveaux objets via la surcharge de la fonction membre; 2. Overload = modifier l'objet actuel et la référence de retour; 3. Fonction d'amie surcharge

Comment déboguer le code Python dans le texte sublime? Comment déboguer le code Python dans le texte sublime? Aug 14, 2025 pm 04:51 PM

UsuBrimeText’sBuildSystemTorunpyThonscriptsandcatcherRorSpressingCtrl baftersettingthecorrectBuildSystemorCreatacustomone.2.InsertStrategicprint () StatementScocheckVariableValues, Types, etxExecutionflow, usingLabelSAndrepr () Forclarit

std :: map vs std :: non ordered_map en c std :: map vs std :: non ordered_map en c Aug 14, 2025 pm 06:53 PM

En C, le choix de STD :: Map et STD :: Unordred_map dépend des exigences spécifiques. 1. Différentes structures sous-jacentes: MAP STD :: est implémenté en fonction des arbres rouges et noirs, avec des clés stockées dans l'ordre, l'ordre croissant par défaut et la complexité de la recherche et de l'insertion est O (Logn); STD :: Unordred_map utilise une table de hachage, non ordonnée, et la complexité moyenne de la recherche et de l'insertion est O (1), et le pire est O (n). 2. Performances d'insertion et frais généraux de mémoire: l'insertion de la carte nécessite le maintien de la structure des arbres et est moins efficace; L'insertion non ordonnée_map est plus rapide mais consomme plus de mémoire et peut être optimisée via réserve (). 3. Fonction de comparaison personnalisée: MAP prend en charge la fonction de comparaison personnalisée, non ordonnée

Comment déboguer un script python dans vscode Comment déboguer un script python dans vscode Aug 16, 2025 am 02:53 AM

Pour déboguer Python Scripts, vous devez d'abord installer l'extension Python et configurer l'interprète, puis créer un fichier lancé.json pour définir la configuration de débogage, puis définir un point d'arrêt dans le code et appuyez sur F5 pour démarrer le débogage. Le script sera interrompu au point d'arrêt, permettant de vérifier les variables et l'exécution étape par étape. Enfin, en vérifiant le problème en affichant la sortie de la console, en ajoutant des journaux ou en ajustant les paramètres, etc., pour s'assurer que le processus de débogage est simple et efficace après la correction de l'environnement.

Comment rédiger un makefile de base pour un projet C? Comment rédiger un makefile de base pour un projet C? Aug 15, 2025 am 11:17 AM

AbasicMakeFileAutomatesC Compilation par définition de produits avec des objectifs, des dépendances et des commandes.2.

Comment fonctionne le mot clé de rendement en python Comment fonctionne le mot clé de rendement en python Aug 15, 2025 am 08:23 AM

Le mot clé de rendement est utilisé pour définir une fonction de générateur, afin qu'il puisse suspendre l'exécution et le retour des valeurs un par un, puis se remettre de la pause; La fonction du générateur renvoie un objet générateur, a des caractéristiques d'évaluation paresseuses et peut enregistrer la mémoire. Il convient à la gestion des scénarios tels que des fichiers volumineux, des données de streaming et des séquences infinies. Le générateur est un itérateur qui prend en charge Next () et pour les boucles, mais ne peut pas être rembobiné et doit être recréé pour itérer à nouveau.

Comment exécuter le code Python dans le texte sublime? Comment exécuter le code Python dans le texte sublime? Aug 16, 2025 am 04:58 AM

Assurez-vous que Python est installé et ajouté au chemin du système, exécutez Python - Version ou Python3 - Version Version via le terminal; 2. Enregistrez le fichier Python en tant qu'extension .py, comme Hello.py; 3. Créez un système de construction personnalisé dans sublimeText, les utilisateurs de Windows utilisent {"CMD": ["Python", "- U", "$ File"]}, les utilisateurs de macOS / Linux utilisent {"CMD": ["Python3

See all articles