C# 到 Python(不是 IronPython)发送和接收数组、Into、字符串、小数

Posted

技术标签:

【中文标题】C# 到 Python(不是 IronPython)发送和接收数组、Into、字符串、小数【英文标题】:C# to Python (not IronPython) Sending and Recieving Array's, Int, String, Decimals 【发布时间】:2017-04-12 00:42:36 【问题描述】:

我一直在研究一种简单的方法来启动 Python(不是 IronPython)脚本并传递参数(例如 Array、String、Int、Decimal),然后从 Python 脚本中检索输出(例如数组)。

所有研究都指向不可靠的非常复杂的方法或有限的 IronPython。

如果 VBA 可以通过 xlwings 做到这一点(真的很好),为什么不能在 Visual Studio 中使用 C#?

任何建议、链接或示例都会很有帮助。谢谢

【问题讨论】:

你可以试试pythonnet:github.com/pythonnet/pythonnet 【参考方案1】:

正如@denfromufa 提到的,Pythonnet 是要走的路。以下是如何启动模块并将对象从 C# 传递给它。 注意:

numpy 是此处给出的示例,但您可以将其替换为任何其他模块,甚至是自定义模块。 array 对象作为示例显示,但对于 stringdoubleint 等来说完全相同。 在此示例中,我使用PyScope 在 Python 引擎中直接执行所有操作,因为您的问题是从 C# 到 Python。如果需要 C# 端的对象,可以改用dynamic 类型,并使用Py.Import() 导入模块。
using Python.Runtime;
double[] a = [2.1, 3.5, 5.4];

using (Py.GIL())

    using (PyScope scope = Py.CreateScope())
    
        scope.Exec("import numpy as np");

        scope.Set("a", a.ToPython())

        scope.Exec("b = np.array(a)");
    

【讨论】:

以上是关于C# 到 Python(不是 IronPython)发送和接收数组、Into、字符串、小数的主要内容,如果未能解决你的问题,请参考以下文章

Python 和C#的交互

安装ironpython

在C#环境中动态调用IronPython脚本(一)

IronPython for .NET 核心

ImportError with IronPython in C#

Python / IronPython-仅引用类对象时如何返回类的特定属性的值?