2011-08-09 21 views
11

Actualmente estoy creando un programa en C# que llamará funciones en archivos de script de python proporcionados.
Algunos de estos archivos script llama _getframe() en sys, lo que resulta en el error:IronPython sys._getframe no encontrado

System.MissingMemberException: 'module' object has no attribute '_getframe'

(Desde IronPython no tiene _getframe activado por defecto.)

he hecho un montón de googlear y descubrió que puede activarlo en ipy.exe proporcionando -X:Frames como una opción de línea de comando, sin embargo, esto no resuelve mi problema ya que no estoy usando directamente ipy.exe para ejecutar el código python.

En this thread mencionan la reconstrucción de IronPython desde el código fuente con las opciones de línea de comando, descargué los archivos fuente pero no tengo idea de cómo compilarlos con esas opciones.
También mencionan que las opciones están en el instalador oficial, he ejecutado el instalador exe varias veces pero no he visto las opciones allí.

Respuesta

14

Al crear PythonEngine puede pasar un diccionario de opciones; sólo tiene que establecer los "marcos" y/o "llaves FullFrames" en el diccionario para true:

var options = new Dictionary<string, object>(); 
options["Frames"] = true; 
options["FullFrames"] = true; 
ScriptEngine engine = Python.CreateEngine(options); 

Si no desea FullFrames, acaba de salir hacia fuera o se establece en false.

5

Un poco fuera del alcance de la pregunta, pero está destinado a que cualquier persona que reciba este error invocando directamente un script de Python utilizando el intérprete ipy.exe.

Puede simplemente agregar el argumento -X:FullFrames. Por ejemplo, invoque el script como

ipy.exe -X:FullFrames script.py