Если вы хотите отличить поведение от файла 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")
Теперь можно использовать одну и ту же область видимости в разных сценариях, чтобы вы могли делиться переменными.