簡體   English   中英

在C#中等效的IronPython'execfile'

[英]IronPython 'execfile' Equivalent in C#

我想知道如何從C#執行execfile Python命令的功能。 在此示例中:

var runtime = Python.CreateRuntime();
dynamic scope = 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);

現在我的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")

現在,它可以在不同的腳本中使用相同的作用域,因此您可以共享變量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM