1

我有一个Python脚本,我在我的C#代码 ( Ironpython ) 中使用它,它工作正常。所以另外我想在Python脚本中添加一个列表作为我的函数的输入参数。

我从 C# WinForm 中得到一些字符串,这些字符串的格式类似于 Python 代码:

string code = "list [a, b, c, d]";

我的附加 C# 代码:

ScriptSource source = m_engine.CreateScriptSourceFromString(code);
dynamic script = m_engine.ExecuteFile(@"path to my file");
dynamic function = script.UpdateElements(source);

但后来我得到以下异常:

迭代 ScriptSource 类型的非序列

在我的 Python 文件中,我有一个这样的函数(其中 source 是一个列表):

def UpdateElements(source):
   #do some stuff

所以我的问题是:如何将 C# 中的字符串列表作为输入传递给 Python 脚本中的函数?

4

1 回答 1

3

有一个字符串列表

var code = "['a', 'b', 'c', 'd']";

您可以执行此列表文字源来检索 IronPython 列表:

dynamic result = source.Execute();

此列表可用于调用函数:

dynamic function = script.UpdateElements(result);

作为替代方案(如果文字字符串列表只是一种解决方法,并且您有其他形式的实际值),您还可以为 IronPython 函数提供一个 .NET 集合,并且适用于许多场景:

var data = new[] { "a", "b", "c", "d" };
var engine = Python.CreateEngine();
dynamic script = engine.ExecuteFile(@"script.py");
dynamic function = script.UpdateElements(data);
于 2013-11-07T11:07:59.883 回答