J'ai quelques variables globales dans un script Python. Certaines fonctions de ce script appellent C - est-il possible de définir une de ces variables en C et si oui, comment? J'apprécie que ce n'est pas un très beau design en premier lieu, mais je dois faire un petit changement au code existant, je ne veux pas se lancer dans la refonte majeure des scripts existants.Comment accéder à une variable globale Python à partir de C?
Répondre
Je ne suis pas un gourou python, mais j'ai trouvé cette question intéressante, donc j'ai fait des recherches. This a été le premier succès sur "python embedding API" - aide-t-il?
Si les attributs appartiennent à la portée globale d'un module, vous pouvez utiliser « PyImport_AddModule » pour obtenir une poignée à l'objet du module. Par exemple, si vous vouliez obtenir la valeur d'un entier dans le module principal nommé « foobar », vous procédez comme suit:
PyObject *m = PyImport_AddModule("__main__"); PyObject *v = PyObject_GetAttrString(m,"foobar"); int foobar = PyInt_AsLong(v); Py_DECREF(v);
Je recommande d'utiliser pyrex
pour faire une extension module vous pouvez stocker les valeurs dans python, et cdef un tas de fonctions qui peuvent être appelées à partir de C pour y retourner les valeurs. Sinon, cela dépend beaucoup du type de valeurs que vous essayez de transmettre.
Êtes-vous prêt à modifier l'API a un petit bit?
Vous pouvez faire la fonction C retourne la nouvelle valeur pour le monde, puis l'appeler comme ceci:
my_global = my_c_func(...)
Si vous utilisez Robin ou l'API Python C directement , vous pouvez passer le dictionnaire global comme paramètre supplémentaire et le modifier
- Si votre global est toujours dans le même module, la solution de Sherm est superbe
Pour tous ceux qui viennent ici de Google, voici la méthode directe:
PyObject* PyEval_GetGlobals()
https://docs.python.org/2/c-api/reflection.html
https://docs.python.org/3/c-api/reflection.html
La valeur de retour est accessible comme un dictionnaire.
- 1. Variable globale en Qt, comment?
- 2. avec Déclarez une variable globale dans l'objectif c
- 3. dans ssis comment puis-je inclure une référence à une variable globale à partir d'un composant de script?
- 4. Accéder à une clé memcache de PHP à partir de Python
- 5. Problème de variable globale
- 6. Comment accéder à la variable JS en C#
- 7. WPF Application utilisant une variable globale
- 8. iphone variable globale
- 9. Créer une regex à partir de l'expression globale
- 10. C#: Comment accéder à une cellule Excel?
- 11. Mappage d'une variable globale à partir d'une bibliothèque partagée avec ctypes
- 12. Accéder à une base de données MySQL à partir de python
- 13. Appelez Python à partir de C++
- 14. Comment rendre une classe globale à l'ensemble de l'application?
- 15. Comment modifier une variable globale dans une fonction JQuery $ .each?
- 16. Accéder à proc_dir_entry à partir de proc_fops.open?
- 17. Accéder à une variable membre d'UIView à partir d'un autre UIView
- 18. Accéder à une variable déclarée dans un contrôleur à partir d'un modèle
- 19. Comment accéder à plusieurs valeurs à partir des contrôles
- 20. rails: accéder à une variable d'instance dans un fichier js.erb
- 21. comment définir une variable à partir de la sortie mysql
- 22. Comment une application peut-elle accéder à la variable d'environnement définie par une autre application?
- 23. Différence entre une variable locale et une variable appelée à partir d'une méthode? C#
- 24. Comment accéder à la valeur d'une variable C# dans une page .aspx?
- 25. Spring-WS: Comment accéder à MessageContext à partir de PayloadEndpoint
- 26. Comment accéder à ActiveRecord :: AutosaveAssociation.marked_for_destruction? à partir de modèle parent
- 27. Accéder à la variable d'environnement à partir de la servlet Java
- 28. Accéder à une variable statique par $ var :: $ reference
- 29. utiliser python pour accéder à mysql
- 30. Comment puis-je accéder à argc et argv en C++ à partir d'une fonction de bibliothèque
'Ce' lien est cassé - quelqu'un at-il un lien fixe? – leecbaker
Correction - Odd qu'ils réorganiseraient les archives de la liste comme ça, mais googler pour le texte cité trouvé le message assez facilement. :-) –