IronPython';execfile';等价于C#

IronPython';execfile';等价于C#,c#,ironpython,C#,Ironpython,我想知道如何执行“execfile”Python命令的功能 但是从C#。在本例中: var runtime=Python.CreateRuntime(); 动态范围=Python.UseFile(“body.py”); 您可以指定主体文件 在body.py的标题中,我指定了标题: execfile('header.py') 我想从C#生成那个execfile,我该怎么做 注意:导入不起作用,因为我在其中动态声明变量 header.py范围。import不会导入该变量,因为它们会 还不存在 多

我想知道如何执行“execfile”Python命令的功能 但是从
C#
。在本例中:

var runtime=Python.CreateRuntime();
动态范围=Python.UseFile(“body.py”);
您可以指定主体文件

body.py
的标题中,我指定了标题:

execfile('header.py')
我想从
C#
生成那个execfile,我该怎么做

注意:导入不起作用,因为我在其中动态声明变量 header.py范围。import不会导入该变量,因为它们会 还不存在


多谢各位

如果希望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);
我的Header.py如下所示:

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

现在,它可以在不同的脚本中使用相同的作用域,这样您就可以共享变量。

如果您想从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);
我的Header.py如下所示:

someVarSetByBody = "This was set by the body"
Console.WriteLine("Body is loading")
myexecfile(r"..\..\IronPython\Header.py")
Console.WriteLine("Body has loaded")
Console.WriteLine("Header is loading")
Console.WriteLine("Variable set by body: %s" %  someVarSetByBody)
Console.WriteLine("Header has loaded")
它现在可以在不同的脚本中使用相同的作用域,因此您可以共享变量