C#调⽤Python3(在VisualStudio2022中基于.NET6.0框架调⽤Py。。。
这两天基于CSDN【码客巅云】转载的【C#调⽤python脚本样例】进⾏学习,过程中遇到不少坑,折腾了好久,改了不少代码和配置才避坑成功。想到⼤家,特别是初学者可能也会遇到这些问题,特分享复盘如下。期望能帮助⼤家。
⽂章⽬录
1.⼯具环境
环境和⼯具。
Visual Studio 2022
框架:.NET 6.0
依赖NuGet包:ironPython 2.7.11
运⾏环境:Python 3.9 64位
提⽰:以下是本篇⽂章正⽂内容,下⾯案例可供参考
2.创建C#项⽬
使⽤console控制台应⽤
使⽤.NET6.0
writeline和write的区别python3.安装ironPython
通过NuGet在线安装【ironPython 2.7.11】。切记不要安装【预发⾏版】
最终在依赖项中看到已下载好的ironPython
4.Python代码⽂件
创建⼀个英⽂⽂件夹【PythonCodeFile】⽤于存放Python的代码⽂件
打开Python代码⽂件所在⽂件夹,拖动⾄资源管理器中【PythonCodeFile】⽂件夹上⽅,⽂件会⾃动复制到项⽬⽬录下。
5.创建类
⼀共要创建两个类:
⼀个是⽤于存放数据对象的类【DateObjectTest.cs】
另⼀个是⽤来调⽤Python代码的执⾏类【RunPython.cs】
引⽤都是:
using System;
using IronPython.Hosting;
using Microsoft.Scripting.Hosting;
5.1.类【DateObjectTest.cs】代码
代码如下(⽰例),命名空间⼤家记得改成⾃⼰的:
using System;
using IronPython.Hosting;
using Microsoft.Scripting.Hosting;
namespace ConsoleAppRunPythonCode001
{
public class DataObjectTest
{
public DataObjectTest(string userName,int age, string desc)
{
UserName = userName;
Age = age;
Desc = desc;
}
/// <summary>
/// 属性:姓名
/// </summary>
public string UserName { set; get;}
/// <summary>
/// 属性:年龄
/// </summary>
public int Age { set; get;}
/// <summary>
/// 属性:描述
/// </summary>
public string Desc { set; get;}
public void AddAge(int age)
{
this.Age += age;
this.Desc = String.Format("{0}长⼤了{1}岁(from C#)", this.UserName, age);
}
public override string ToString()
{
return String.Format("姓名:{0}; 年龄:{1}; 描述:{2}", this.UserName, this.Age, this.Desc);
}
}
}
5.2.类【RunPython.cs】代码
代码如下(⽰例),命名空间⼤家记得改成⾃⼰的:
using System;
using IronPython.Hosting;
using Microsoft.Scripting.Hosting;
namespace ConsoleAppRunPythonCode001
{
internal class RunPython
{
public void RunPythonTest()
{
// 加载外部 python 脚本⽂件.
ScriptRuntime pyRumTime = Python.CreateRuntime();
dynamic obj = pyRumTime.UseFile(@"E:\MyPython\ConsoleAppRunPythonCode001\ConsoleAppRunPythonCode001\PythonCodeFile\TestPython File.py");
// ==================================================
// ==================================================
// 简单调⽤脚本⽂件中的⽅法.
Console.WriteLine(obj.welcome("Test C# Call Python."));
Console.WriteLine(obj.welcome("测试中⽂看看是否正常!"));
// ==================================================
// 测试⾃定义对象.
DataObjectTest testObj = new DataObjectTest("张三",20,"");
Console.WriteLine("调⽤脚本前对象数据:{0}", testObj);
Console.WriteLine("调⽤ testAddAge 脚本后,对象数据={0}", testObj);
Console.WriteLine("调⽤ testAddAge2 脚本后,对象数据={0}", testObj);
/
/ ==================================================
// 测试 List.
IronPython.Runtime.List testList = new IronPython.Runtime.List();
testList.Add("List数据1");
testList.Add("List数据2");
testList.Add("List数据3");
// 测试参数为 List.
string result = stList(testList);
Console.WriteLine("调⽤ testList ,返回结果:{0}", result);
// ==================================================
// 测试 Set.
IronPython.Runtime.SetCollection testSet = new IronPython.Runtime.SetCollection();
testSet.add("Set数据1");
testSet.add("Set数据2");
testSet.add("Set数据3");
// 测试参数为 Set.
result = stSet(testSet);
Console.WriteLine("调⽤ testSet ,返回结果:{0}", result);
// ==================================================
// 测试 Dictionary.
IronPython.Runtime.PythonDictionary testDictionary = new IronPython.Runtime.PythonDictionary(); testDictionary["Key1"]="Value1";
testDictionary["Key2"]="Value2";
testDictionary["Key3"]="Value3";
// 测试参数为 Dictionary.
result = stDictionary(testDictionary);
Console.WriteLine("调⽤ testDictionary ,返回结果:{0}", result);
Console.ReadLine();
}
}
}
【RunPython.cs】代码中需要修改Python⽂档的⽬录
复制Python代码⽂件的完整路径,设置【RunPython.cs】中的⽬录
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论