IronPython'execfile'在C#中等效

时间:2012-03-27 18:39:18

标签: c# ironpython

我想知道如何执行'execfile'Python命令的功能 但来自C#。在这个例子中:

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

指定正文文件。

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

execfile('header.py')

我想从C#制作该exec文件,我该怎么做?

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

非常感谢!

1 个答案:

答案 0 :(得分: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")

现在可以在不同的脚本中使用相同的范围,因此您可以共享变量。