下面是详细的讲解:
1. 安装Python环境和C#运行库
首先,需要在电脑上安装Python环境和C#运行库,以便在C#中调用Python程序。Python环境需下载安装Python3版本及以上。C#运行库需要使用NuGet安装Python.Runtime包。可以通过在项目中右击“依赖项”-> “管理NuGet程序包” -> 搜索“python.runtime” -> 安装。
2. 编写Python程序
假设需要执行的Python程序接收一个参数num,并返回num的平方。可以编写以下Python程序:
def square(num):
return num * num
3. 在C#中调用Python并传入参数
接下来,需要在C#中编写代码,调用Python程序并传入参数。可以使用Python.Runtime库来实现。下面的代码演示了如何在C#中调用Python并传入参数,获取返回值。
using Python.Runtime;
public static dynamic execute_python_script(string script_path, dynamic input)
{
Py.GIL(); // 初始化Python解释器,多线程情况下必须先调用这个语句
string python_home = @"C:\Python39"; // Python的安装路径
Environment.SetEnvironmentVariable("PYTHONHOME", python_home);
Environment.SetEnvironmentVariable("PYTHONPATH", python_home);
using (Py.PythonPath.Path("path/to/python/scripts")) // 设置Python脚本所在路径
{
using (Py.PythonPath.Path(python_home + ";" + Environment.GetEnvironmentVariable("PYTHONPATH", EnvironmentVariableTarget.Process))) // 设置Python路径
{
using (PyScope py = Py.CreateScope()) // 创建Python Scope,释放资源
{
py.ExecFile(script_path); // 执行Python脚本
dynamic script = py.Get("square"); // 获取Python函数对象
return script(input); // 返回Python程序运算结果
}
}
}
}
4. 示例
下面的示例演示了如何在C#中调用上述Python程序,并打印出输入参数的平方。
using System;
using Python.Runtime;
public class Program
{
public static void Main(string[] args)
{
int input = 3; // 输入参数
string script_path = "path/to/python/scripts/square.py"; // Python脚本路径
try
{
dynamic result = execute_python_script(script_path, input);
Console.WriteLine($"The square of {input} is {result}");
}
catch (Exception e) // 捕获异常
{
Console.WriteLine(e.Message);
}
}
private static dynamic execute_python_script(string script_path, dynamic input)
{
// 同上代码
}
}
这是另一个示例,演示了如何调用另一个Python程序,该程序接收一个列表参数并返回最大值的示例:
Python程序:
def max_num(numbers):
return max(numbers)
C#程序:
using System;
using Python.Runtime;
public class Program
{
public static void Main(string[] args)
{
int[] numbers = { 3, 5, 2, 1, 4 };
var input = PyList.New(numbers); // 将C#数组转换为Python列表
string script_path = "path/to/python/scripts/max_num.py";
try
{
dynamic result = execute_python_script(script_path, input);
Console.WriteLine($"The maximum number is {result}");
}
catch (Exception e) // 捕获异常
{
Console.WriteLine(e.Message);
}
}
private static dynamic execute_python_script(string script_path, dynamic input)
{
// 同上代码
}
}
这里使用了Python.Runtime库的PyList类将C#数组转换为Python列表,然后将其传递给Python程序作为参数。在Python程序中,可以使用max()函数找到列表中的最大值并返回。C#程序将Python程序返回的结果打印到控制台上。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#调用Python程序传参数获得返回值 - Python技术站