C#到Python(不是IronPython)发送和接收数组,Int,String,Decimals

时间:2016-11-28 10:19:02

标签: c# python anaconda xlwings python.net

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

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

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

任何建议,链接或示例都会非常有用。谢谢

1 个答案:

答案 0 :(得分:0)

正如@denfromufa所述,Pythonnet是必经之路。这是启动模块并将对象从C#传递到模块的方法。 注意:

    例如,此处给出了
  • numpy,但您可以将其替换为任何其他模块,甚至是自定义模块。
  • array对象为例,但对于stringdoubleint等,它是完全相同的。
  • 在此示例中,由于您的问题是从C#到Python,因此我直接使用PyScope在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)");
    }
}