Ich versuche, einige eingebettete Python-Code ausführen.
während einige davon gut funktioniert einige der Importe funktionieren nicht.Eingebettete Python findet nicht einige Module, (Ctypes, ...)
// pseudo code
...
Py_SetPath("//path//to//python35.zip");
...
Py_Initialize();
PyEval_InitThreads();
char * s = "import ctypes\n\nctypes.windll.user32.LockWorkStation()";
...
PyObject *main_module = PyImport_AddModule("__main__");
PyObject *main_dict = PyModule_GetDict(main_module);
...
PyObject * PyRes = PyRun_String(s, Py_file_input, main_dict, main_dict);
...
in der Tat, wenn alles, was ich tun Anruf ist,
...
char * s = "import ctypes";
...
ich einen Fehler ("ctypes" nicht gefunden wird).
Aber wenn ich ...
...
import time
t = time.ctime()
...
Es funktioniert gut, so klar einige Module geladen werden, während andere nicht.
Irgendwelche Vorschläge, warum "Ctypes" einen Fehler werfen würden, während andere dies nicht tun?
bearbeiten: mehr Code ...
#include <python.h>
int main()
{
////////////////////////////////////////////////////////////////////////
Py_SetPath(L"path\\to\\python35.zip");
Py_Initialize();
PyEval_InitThreads();
PyThreadState *mainstate = PyThreadState_Get();
PyEval_ReleaseLock();
//
// ...
//
// run the code.
PyEval_AcquireLock();
PyInterpreterState* mainInterpreterState = mainstate->interp;
PyObject *main_module = PyImport_AddModule("__main__");
PyObject *main_dict = PyModule_GetDict(main_module);
Py_INCREF(main_module);
PyObject *local_dic = PyDict_New();
Py_XINCREF(local_dic);
// we can now run our script
const char* s = "import ctypes";
PyObject * PyRes = PyRun_String(s, Py_file_input, main_dict, local_dic);
PyObject* ex = PyErr_Occurred();
if (NULL != ex)
{
// didn't work, import error.
}
PyErr_Clear();
PyDict_Clear(local_dic);
Py_XDECREF(local_dic);
Py_DECREF(main_module);
PyThreadState_Swap(NULL);
PyThreadState_Swap(mainstate);
PyEval_ReleaseLock();
//
// ...
//
// close
PyEval_AcquireLock();
PyThreadState_Swap(mainstate);
Py_Finalize();
//////////////////////////////////////////////////////////////////////////
}
Wie über Sie ein minimales Beispiel für andere extrahieren zu reproduzieren? –
Es ist so ziemlich wie ich es habe, stackoverflow erlaubt nicht mehr Code hinzugefügt werden. Sofern Sie sich nicht irgendwo vorstellen können, könnte ich es hier einfügen und zurück verlinken. –
Sie missverstehen mich und auch Sie scheinen die Regeln der Website hier nicht zu kennen. Sie sollen ein minimales aber vollständiges Beispiel extrahieren, um es hier zu veröffentlichen. Ihr "Pseudo-Code" ist sowohl überflüssig als auch nicht genug, Sie müssen Code zur Verfügung stellen, der es jedem erlaubt, Ihr Problem zu reproduzieren. Dies hilft auch, die üblichen Fälle von dummen Fragen zu vermeiden, übrigens. –