Estoy integrando Python en una aplicación C/C++ que tendrá una API definida.Embedded Python 2.7.2 Importación de un módulo desde un directorio definido por el usuario
la aplicación necesita para crear instancias de clases definidas en un guión, que se estructuran más o menos así:
class userscript1:
def __init__(self):
##do something here...
def method1(self):
## method that can be called by the C/C++ app...etc
que he logrado en el pasado (para la prueba de concepto) para hacer esto utilizando el siguiente tipo de código:
PyObject* pName = PyString_FromString("userscript.py");
PyObject* pModule = PyImport_Import(pName);
PyObject* pDict = PyModule_GetDict(pModule);
PyObject* pClass = PyDict_GetItemString(pDict, "userscript");
PyObject* scriptHandle = PyObject_CallObject(pClass, NULL);
Ahora que estoy en más de un entorno de producción, esto está fallando en la línea de PyImport_Import - Creo que esto podría ser debido a que estoy tratando de anteponer un directorio a la secuencia de comandos nombre, por ejemplo
PyObject* pName = PyString_FromString("E:\\scriptlocation\\userscript.py");
Ahora, para darle una idea de lo que he intentado, he intentado modificar la ruta del sistema antes de todas estas llamadas para hacer que la búsqueda de este módulo. Básicamente intentaron modificar sys.path programación:
PyObject* sysPath = PySys_GetObject("path");
PyObject* path = PyString_FromString(scriptDirectoryName);
int result = PyList_Insert(sysPath, 0, path);
Estas líneas funcionar bien, pero no tienen efecto en hacer mi trabajo código. Obviamente, mi código real tiene un montón de errores que he excluido, ¡así que no te preocupes por eso!
Así que mi pregunta: ¿cómo dirijo el intérprete incrustado a mis secuencias de comandos de manera adecuada para que pueda instanciar las clases?
Muchas gracias - ¡Esto me ayudó a atravesar la pared! ¡Ahora para descubrir qué está mal con el script de prueba que estoy llamando! – Fritz
En Python 3, PyString_FromString se ha ido. Use PyBytes_FromString en su lugar. – edj