2010-10-07 7 views
0

En raison du refactoring/remaniement sur un contrôleur, j'ai dû intégrer un interpréteur Python dans une application C. Je peux maintenant appeler les fonctions python et passer/obtenir des objets dans Python très bien.Maintenance d'un objet Python lors de son intégration dans C

Le code python est un contrôleur pour un robot (actuellement simulé), il faut maintenant utiliser un peu de code C pour les comparaisons que je fais.

Auparavant, le code Python créait des objets, lisait des capteurs, exécutait un code de contrôle et écrivait les sorties sur les moteurs. Tout cela sauf le code de contrôle doit maintenant être fait en C. Le problème que j'ai est que les objets qui sont créés dans une fonction init (en python) qui, quand je viens d'exécuter le code de contrôle n'existe plus.

Quelle est la meilleure façon de résoudre ce problème? Mon idée était de renvoyer les contrôleurs de la fonction init et de leur stocker des références dans le C, en passant la référence au contrôleur chaque fois qu'il est appelé.

Merci pour toute aide.

Répondre

1

Cela peut ne pas être la réponse que vous voulez, mais il existe des façons de travailler avec C et Python autres que l'intégration d'un interpréteur dans une application C.

À savoir, pourquoi ne faites-vous pas le contraire? Créer des bibliothèques C pour Python? Vous pouvez contrôler le flux général de votre application en Python, ce qui est beaucoup plus confortable, et appeler le code C quand bon vous semble.

Encore une fois, je ne réponds pas vraiment à votre vraie question, alors n'hésitez pas à m'ignorer.

+0

Oui, je pense que généralement le code python est écrit uniquement en python, alors les goulets d'étranglement de performance sont déplacés vers les modules C. Sauf si l'auteur a besoin d'interfaces de très bas niveau avec le système d'exploitation sous-jacent, je ne vois pas le besoin de C. – Novikov

+0

Je dois utiliser une base de code considérable qui est écrite en C. C'est un autre contrôleur que j'utilise dans la recherche pour Comparaison. Il est plus grand et a plus de bibliothèques, d'attachements et de toutes sortes alors que le Python est assez autonome. Par conséquent, je pensais qu'il serait plus facile d'appeler le bit python de C plutôt que d'essayer de faire fonctionner le C à partir de python - le seul problème que j'ai est celui de la persistance des objets détaillée ci-dessus. – NBenatar

+0

Je dirais toujours qu'il est plus facile pour l'interpréteur d'appeler du code C, que pour le code C de faire passer des choses dans un interpréteur intégré. Pourquoi n'enveloppez-vous pas les bibliothèques avec PyObjects? – slezica