¿Por qué se bloquea la API Python / C en PyRun_SimpleFile?
He estado experimentando con la incorporación de diferentes lenguajes de secuencias de comandos en una aplicación C ++, actualmente estoy probando Stackless Python 3.1. He probado varios tutoriales y ejemplos, los pocos que puedo encontrar, para intentar ejecutar un script simple desde una aplicación.
Py_Initialize();
FILE* PythonScriptFile = fopen("Python Scripts/Test.py", "r");
if(PythonScriptFile)
{
PyRun_SimpleFile(PythonScriptFile, "Python Scripts/Test.py");
fclose(PythonScriptFile);
}
Py_Finalize();
Por alguna extraña razón, ejecutar este código resulta en una infracción de acceso en:
PyRun_SimpleFile(PythonScriptFile, "Python Scripts/Test.py");
He buscado en línea a otros con un problema similar y encontré solo uno. Su única solución fue una solución alternativa que solo parece posible en una versión anterior de Python: crear un objeto de archivo python y devolver elFILE*
de ese objeto de archivo de Python enPyRun_SimpleFile
. Sin embargo, tales llamadas a funciones no están disponibles, la API Python 3.1 crea objetos de archivo a partir de un descriptor de archivo y devuelve descriptores de archivo, pero elPyRun_SimpleFile
la función aún requiere unFILE*
.
No sé cómo ejecutar las secuencias de comandos desde el archivo, menos cargar el archivo completo en la memoria manualmente y ejecutarlo como una cadena gigante, ciertamente no es una solución práctica.
¿Lo que da? ¿Cómo puedo realizar esta tarea si la API tiene un error interno?
Actualización: He logrado construir Stackless Python 3.1 desde la fuente y, sin embargo, el bloqueo permanece completamente sin cambios, a pesar de usar la misma biblioteca de tiempo de ejecución de C. Tanto mi proyecto como la fuente Stackless Python 3.1 están construidos con el compilador C ++ de Visual Studio 2010 y el tiempo de ejecución de C. Ya no tengo ninguna idea de lo que podría resolver este problema, salvo modificar Python para usar un nombre de archivo y no un ARCHIVO *. Otra solución terrible.