IronPython sys._getframe non trovato

Attualmente sto costruendo un programma in C # che chiamerà le funzioni nei file di script Python forniti.
Alcuni di questi file di script chiamano _getframe() in sys , il che risulta nell’errore:

System.MissingMemberException: l’object ‘module’ non ha attributo ‘_getframe’

(Poiché IronPython non ha _getframe triggersto per impostazione predefinita.)

Ho fatto un bel po ‘di ricerca su google e ho scoperto che è ansible triggersrlo in ipy.exe fornendo -X:Frames come opzione della riga di comando, tuttavia questo non risolve il mio problema dato che non sto usando ipy.exe direttamente per eseguire il codice Python.

In questo thread menzionano la ricostruzione di IronPython dal sorgente con le opzioni della riga di comando, ho scaricato i file sorgente ma non ho idea di come costruirlo con quelle opzioni.
Inoltre menzionano che le opzioni sono nel programma di installazione ufficiale, ho eseguito l’installer exe più volte ma non ho visto un assaggio di quelle opzioni lì.

Quando crei PythonEngine puoi passare un dizionario di opzioni; è sufficiente impostare i tasti “Frames” e / o “FullFrames” nel dizionario su true :

 var options = new Dictionary(); options["Frames"] = true; options["FullFrames"] = true; ScriptEngine engine = Python.CreateEngine(options); 

Se non vuoi FullFrame, basta lasciarlo fuori o impostarlo su false .

Un po ‘al di fuori della portata della domanda, ma intendeva per chiunque altro ottenere questo errore invocando uno script Python usando direttamente l’interprete ipy.exe.

Puoi semplicemente aggiungere l’argomento -X:FullFrames . Quindi per esempio invoca il copione come

 ipy.exe -X:FullFrames script.py