c# 中使用Python需要先安装IronPython
方法如下:
打开VisualStudic。建立C#桌面应用(Windowsudu)。
在“解决方案资源管理器”中,需要右击“引用”,管理NuGet程序包。
搜索IronPython。安装。(本次安装的是2.7.8.1)
安装过程如下:
------------------
正在尝试收集与目标为“.NETFramework,Version=v4.6.1”的项目“Windowsudu”有关的包“IronPython.2.7.8.1”的依赖项信息
收集依赖项信息花费时间 293.7 ms
正在尝试解析程序包“IronPython.2.7.8.1”的依赖项,DependencyBehavior 为“Lowest”
解析依赖项信息花费时间 0 ms
正在解析操作以安装程序包“IronPython.2.7.8.1”
已解析操作以安装程序包“IronPython.2.7.8.1”
从“nuget.org”检索包“DynamicLanguageRuntime 1.2.1”
从“nuget.org”检索包“IronPython 2.7.8.1”
GET https://api.nuget.org/v3-flatcontainer/dynamiclanguageruntime/1.2.1/dynamiclanguageruntime.1.2.1.nupkg
GET https://api.nuget.org/v3-flatcontainer/ironpython/2.7.8.1/ironpython.2.7.8.1.nupkg
OK https://api.nuget.org/v3-flatcontainer/ironpython/2.7.8.1/ironpython.2.7.8.1.nupkg 936 毫秒
OK https://api.nuget.org/v3-flatcontainer/dynamiclanguageruntime/1.2.1/dynamiclanguageruntime.1.2.1.nupkg 961 毫秒
正在安装 IronPython 2.7.8.1。
正在安装 DynamicLanguageRuntime 1.2.1。
正在将程序包“DynamicLanguageRuntime.1.2.1”添加到文件夹“D:\python\test\Windowsudu\packages”
已将程序包“DynamicLanguageRuntime.1.2.1”添加到文件夹“D:\python\test\Windowsudu\packages”
已将程序包“DynamicLanguageRuntime.1.2.1”添加到“packages.config”
已将“DynamicLanguageRuntime 1.2.1”成功安装到 Windowsudu
正在将程序包“IronPython.2.7.8.1”添加到文件夹“D:\python\test\Windowsudu\packages”
已将程序包“IronPython.2.7.8.1”添加到文件夹“D:\python\test\Windowsudu\packages”
已将程序包“IronPython.2.7.8.1”添加到“packages.config”
已将“IronPython 2.7.8.1”成功安装到 Windowsudu
执行 nuget 操作花费时间 9.42 sec
已用时间: 00:00:10.5701721
-------------------------
c#中调用Python程序
private string testPython()
{
string strH = "";
try
{
ScriptEngine engine = Python.CreateEngine();
ScriptScope scope = engine.ExecuteFile("test1.py");
var jieguo = scope.GetVariable < Func < object, object>>("jieguo");
dynamic sdjg = jieguo(ti);
strH= sdjg.ToString();
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
return strH;
}
其中ti是字符串
jieguo(ti)是Python的程序,将一串数字字符构成的字符串,分解成一个一个数字字符后返回
#file test1.py
def jieguo(mystr):
sdjg=list(map(int,mystr))
return sdjg
---------------------------------------
为什么scope.GetVariable < Func < object, object>>("jieguo");有两个参数,
def jieguo(mystr):而只有一个参数?
因为python的第一参数是默认的self