2012-03-27 88 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") 

它现在能够使用相同的范围,不同的脚本,以便您可以共享的变量。