Ich verwende boost :: python, um Python-Code in eine App einzubetten. Ich konnte Druckanweisungen oder andere Ausdrücke richtig ausgewertet bekommen, aber wenn ich versuche, Module zu importieren, wird nicht importiert und die Anwendung wird beendet. Außerdem gibt der Funktionsaufruf von globals() im eingebetteten Code auch einen Laufzeitfehler.Wie importiere ich Module in boost :: python eingebetteten Python-Code?
#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);
}
Hier, ich habe versucht, die Boost-Import-Funktion zu importieren urllib2 verwenden, das kompiliert und läuft einwandfrei, jedoch mit folgenden exec-Anweisung, gibt es einen Fehler.
Oder wenn ich die Boost-Import-Funktion entfernen und den Import aus dem eingebetteten Code auch ausführen, gibt es einen Fehler. Ich versuchte es mit einem Versuch: außer: Block, aber das funktioniert auch nicht. Liegt das daran, dass die C++ App nicht in der Lage ist, den Speicherort des urllib2 Py-Moduls oder so etwas zu finden? Gibt es eine Möglichkeit, den Pfad des Moduls vor dem Import festzulegen?
Dies ist nur für den internen Gebrauch gebaut, so dass einige harte Codierung der Pfade akzeptabel ist.
Bearbeiten: Weitere Informationen:
Dies ist, was passiert. Ich habe es versucht .. Fang und rief die PyErr_Print() wenn es immer eine Ausnahme gibt, und bekam dies als Fehler die ganze Zeit, wenn Modul importiert oder sogar Funktionsaufrufe. Fehlermeldung:
Traceback (most recent call last):
File "<string>", line 1, in <module>
TypeError: 'NoneType' object does not support item assignment
Kann jemand aus irgendeinem Grund denken?
Gut, dass Sie Ihren Code arbeiten habe. Was willst du damit machen? –
Oh. Ich war total satt von den C++ - Socket-Bibliotheken. Sie brauchen Zeit, um zu verstehen, und da ich kein Computerstudent bin, brauche ich länger um zu verstehen. Also habe ich etwas erstellt, das sich wie ein asynchrones urllib ++ mit dem Python urllib2 auf der Rückseite anfühlt. : D Ich weiß, es klingt verrückt. Aber ich habe jetzt eine extrem bequeme Lösung! – Sahas
Hehe, gut für dich! –