2012-03-27 23 views
1

Ich möchte wissen, wie Sie die Funktionalität des 'execfile' Python-Befehls aber von C# ausführen. In diesem Beispiel:IronPython 'execfile' Entspricht in C#

var runtime = Python.CreateRuntime(); 
dynamic scope = Python.UseFile("body.py"); 

Sie die Body-Datei angeben.

In der Kopfzeile body.py, gebe ich den Header:

execfile('header.py') 

Ich mag würde, dass execfile von C# machen, wie kann ich das tun?

Hinweis: Der Import funktioniert nicht, weil ich Variablen dynamisch innerhalb header.py Bereich deklariert. Import würde diese Variablen nicht importieren, da sie noch nicht existieren.

Vielen Dank!

Antwort

1

Wenn Sie ein anderes Verhalten als die exec-Datei haben möchten, können Sie leicht Ihre eigenen erstellen und solche Dinge tun (Freigabebereich), indem Sie die Funktion in .NET erstellen und diese auf den Bereich setzen. Auf diese Weise können Sie auch zusätzliche Funktionen hinzufügen, wenn Sie dies wünschen.

Dies scheint zu funktionieren:

den Motor einrichten:

var py = Python.CreateEngine(); 
var source = py.CreateScriptSourceFromFile(@"..\..\IronPython\body.py"); 
var scope = py.CreateScope(); 

Dann erstelle ich die Funktion, die von Skripten verwendet werden kann und auf dem

Umfang eingestellt
Action<string> execFileCallback = fileName => 
{ 
    var s2 = py.CreateScriptSourceFromFile(fileName); 
    s2.Execute(scope); 
}; 
((dynamic)scope).myexecfile = execFileCallback; 
source.Execute(scope); 

Jetzt Mein Body.py sieht so aus:

Und meine Header.py sieht wie folgt aus:

Console.WriteLine("Header is loading") 
Console.WriteLine("Variable set by body: %s" % someVarSetByBody) 
Console.WriteLine("Header has loaded") 

Es ist nun in der Lage den gleichen Umfang in den verschiedenen Skripte zu verwenden, so dass Sie die Variablen gemeinsam nutzen können.