如果你想从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")
它现在能够使用相同的范围,不同的脚本,以便您可以共享的变量。