2011-08-09 23 views
11

Aktualnie buduję program w języku C#, który wywoła funkcje w dostarczonych plikach skryptowych Pythona.
Niektóre z tych plików skryptów wywołuje _getframe() w sys, co powoduje błąd:IronPython sys._getframe nie został znaleziony

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

(Od IronPython nie posiada _getframe włączona domyślnie.)

Zrobiłem sporo googlowania i dowiedziałem się, że można go aktywować w ipy.exe, podając -X:Frames jako opcję linii poleceń, ale to nie rozwiązuje mojego problemu, ponieważ nie używam bezpośrednio kodu ipy.exe do wykonania kodu Pythona.

W this thread wspominają one o przebudowie IronPythona ze źródła za pomocą opcji wiersza poleceń, pobrałem pliki źródłowe, ale nie mam pojęcia, jak je skompilować za pomocą tych opcji.
Wspominają również, że opcje są w oficjalnym instalatorze, kilka razy uruchomiłem instalator exe, ale nie widziałem tam tych opcji.

Odpowiedz

14

Podczas tworzenia PythonEngine można przekazać słownik opcji; wystarczy ustawić „Frames” i/lub przycisków „FullFrames” w słowniku do true:

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

Jeśli nie chcesz FullFrames, po prostu zostawić go lub ustawić go false.

5

Trochę poza zakresem pytania, ale przeznaczone dla każdego, kto uzyskał ten błąd, wywołując skrypt w języku Python bezpośrednio za pomocą interpretera ipy.exe.

Możesz po prostu dodać argument -X:FullFrames. Na przykład wywołaj skrypt, taki jak

Powiązane problemy