J'utilise boost :: python pour intégrer du code python dans une application. J'ai été en mesure d'obtenir des instructions d'impression ou d'autres expressions à évaluer correctement, mais lorsque j'essaie d'importer des modules, il n'est pas importé et l'application est en cours de fermeture. De plus, l'appel de la fonction globals() dans le code incorporé donne aussi une erreur d'exécution.Comment importer des modules dans le code python embarqué boost :: python?
#include <boost/python.hpp>
using namespace boost;
using namespace boost::python;
using namespace boost::python::api;
int main(void) {
Py_Initialize();
object main_module = import("__main__");
object main_namespace = main_module.attr("__dict__");
main_namespace["urllib2"] = import("urllib2");
object ignored = exec(
"print 'time'\n", main_namespace);
}
Ici, j'ai essayé d'importer urllib2 en utilisant la fonction d'importation de boost, cette compile et fonctionne correctement, mais avec l'instruction exec suivante, il donne une erreur. Ou lorsque je supprime la fonction d'importation boost et que j'importe également à partir du code embarqué, cela donne une erreur. J'ai essayé d'utiliser un try: except: block mais ça ne marche pas non plus. Est-ce parce que l'application C++ n'est pas capable de trouver l'emplacement du module urllib2 py ou quelque chose? Est-il possible de définir le chemin du module avant d'essayer d'importer?
Ceci est construit uniquement pour un usage interne, donc un codage dur des chemins est acceptable.
Modifier: Plus d'infos:
C'est ce qui se passe. J'ai fait un essai .. attrape et appelle le PyErr_Print() quand il y a une exception, et l'ai eu comme erreur tout le temps quand il y a des modules d'importation ou même des appels de fonction. Message d'erreur:
Traceback (most recent call last):
File "<string>", line 1, in <module>
TypeError: 'NoneType' object does not support item assignment
Quelqu'un peut-il penser à une raison quelconque?
Heureux que vous avez obtenu votre code de travail. Qu'est-ce que tu veux faire avec? –
Oh. J'étais complètement malade des bibliothèques de sockets C++. Ils ont besoin de temps pour comprendre, et comme je ne suis pas un étudiant en informatique, je prends plus de temps à comprendre. Donc, j'ai créé quelque chose qui ressemble à une urllib asynchrone ++ avec le urllib2 python dans le dos. : D Je sais que cela semble fou. Mais j'ai une solution extrêmement pratique maintenant! – Sahas
Hehe, c'est bon pour vous! –