2012-03-27 81 views
1

我想知道如何執行'execfile'Python命令 的功能,但是需要執行C#的功能。在本例中:IronPython'execfile'等效於C#

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

您指定了正文文件。

body.py的頭,我指定的標題:

execfile('header.py') 

我想作出這樣的execfile從C#,我該怎麼辦呢?

注:導入不起作用,因爲我在 header.py範圍內動態聲明變量。導入不會導入該變量,因爲它們確實不存在 。

非常感謝!

回答

1

如果你想從exec文件中獲得不同的行爲,你可以很容易地創建自己的行爲,並通過在.NET中創建函數並將其設置爲範圍來執行此類操作(共享範圍)。這也可以讓你添加額外的功能,如果你願意。

這似乎工作:

設置發動機:

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

然後我創建一個可以通過腳本中使用,並設置它的範圍

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

現在的功能我的Body.py看起來像這樣:

someVarSetByBody = "This was set by the body" 
Console.WriteLine("Body is loading") 
myexecfile(r"..\..\IronPython\Header.py") 
Console.WriteLine("Body has loaded") 

而且我Header.py是這樣的:

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

它現在能夠使用相同的範圍,不同的腳本,以便您可以共享的變量。