我想知道如何执行'execfile'Python命令的功能
但来自C#
。在这个例子中:
var runtime = Python.CreateRuntime();
dynamic scope = Python.UseFile("body.py");
指定正文文件。
在body.py
的标题中,我指定标题:
execfile('header.py')
我想从C#
制作该exec文件,我该怎么做?
注意:导入不起作用,因为我在里面动态声明变量 header.py范围。 import不会导入那些变量,因为它们会导入 还不存在。
非常感谢!
答案 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")
现在可以在不同的脚本中使用相同的范围,因此您可以共享变量。