C# 调用Python

一、简介

IronPython 是一种在 NET 和 Mono 上实现的 Python 语言,由 Jim Hugunin(同时也是 Jython 创造者)所创造。

Python是一种跨平台的计算机程序设计语言。 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。

Python是一种解释型脚本语言,可以应用于以下领域:

● 科学计算和统计

● 人工智能

● 桌面界面开发

● 软件开发

● 后端开发

● 网络爬虫

二、创建 C# 项目

新建一个 Winform 项目 CSharpCallPython

为了更方便的看到控制台打印的效果,在 项目属性 --> 应用程序 将输出类型改为控制台输出

三、C# 调用 Python

1.IronPython 插件

在 NuGet 中安装 IronPython 插件

在项目的 Debug 目录下添加一个 Python 脚本 test.py ,

在 test.py 中添加下面的代码:

def sayHi():

print("f**k you")

def add(x,y):

try:

return x + y

except Exception as err:

return str(err)

def arrSum(arr):

try:

sum = 0

for i in arr:

sum += i

return sum

except Exception as err:

return str(err)

此时,Python 的工作就完成了,接下来我们继续完成 C# 剩余的逻辑。

winform 界面只需要添加一个按钮即可

Form1 代码:

using IronPython.Hosting;

using Microsoft.Scripting.Hosting;

using System;

using System.Windows.Forms;

namespace CSharpCallPython

{

public partial class Form1 : Form

{

public Form1()

{

InitializeComponent();

}

private string PythonScriptPath = string.Empty;

private ScriptEngine PyEngine = null;

private void Form1_Load(object sender, EventArgs e)

{

PythonScriptPath = Application.StartupPath + "\\test.py";

PyEngine = Python.CreateEngine();

}

private void button1_Click(object sender, EventArgs e)

{

dynamic py = PyEngine.ExecuteFile(PythonScriptPath);

py.sayHi();

var sum = py.add(3, 5);

Console.WriteLine("add 方法的和是:{0}", sum);

int\[\] arr = new int3 { 2, 4, 6 };

var sum1 = py.arrSum(arr);

Console.WriteLine("数组的和是:{0}", sum1);

}

}

}

运行后,点击按钮后效果:

2.调用 Python.exe 程序执行

调用 python.exe 文件执行后,由 exe 文件返回执行结果,需要安装 python,下面的代码我试了几次,根本没有效果,返回值都是null,可能是个人配置出了问题,这里就展示一下吧。

C# 代码参考:

Process p = new Process();

//环境安装路径 (已经配置了系统变量,所以可以直接写python.exe)

p.StartInfo.FileName = @"python.exe";

//dll+空格+参数

p.StartInfo.Arguments = @"D:\Develop\TEST\OCR\OCRdemo.py 2 3";//参数以空格分隔,如果某个参数为空,可以传入""

p.StartInfo.UseShellExecute = false; //必需

p.StartInfo.RedirectStandardOutput = true;//输出参数设定

p.StartInfo.RedirectStandardInput = true;//传入参数设定

p.StartInfo.CreateNoWindow = true;

p.Start();

string output = p.StandardOutput.ReadToEnd();

p.WaitForExit();//等待外部程序退出后才能往下执行}

Console.Write(output);//输出

p.Close();

另外,还有其他的一些调用的方式,比如使用 c++ 程序调用 python文件,然后将其做成动态链接库(dll),在 C# 中调用此dll文件,这种方式很复杂,并且受 python 版本、(python/vs)32/64位影响,而且要求用户必须安装python运行环境。


版权声明:本文为CSDN博主「熊思宇」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/qq_38693757/article/details/128939042

相关推荐
冻柠檬飞冰走茶32 分钟前
字母移动游戏题解:贪心求最长可保留连续子串(附 C 实现)
c语言·开发语言·数据结构·算法·动态规划
FRing031 小时前
vue2干货总结7(自定义指令、插槽、单页应用程序、路由的使用(VueRouter))
开发语言·前端·vue.js·vue2
橙橙笔记1 小时前
具身智能的学习 - 完成一个机械臂 第1节
python·学习·机械臂·具身智能
雪落漂泊1 小时前
C++算法 二分查找篇(上)
开发语言·c++·算法
小小张说故事1 小时前
Python 的 class 语句到底执行了什么?拆开 __prepare__、metaclass.__new__ 和那个被讲反的 __set_name__ 顺序
python
波力海苔夹心脆6752 小时前
C# WPF 资源字典详解:ResourceDictionary、MergedDictionaries 与自定义控件案例
开发语言·c#·wpf·入门教程·resource·资源字典
不会算法的笨小孩2 小时前
异常的使用以及会出现的问题
开发语言·c++·c++11·异常
天天被压力3 小时前
【A股分钟级高频数据完全手册 #07】北交所历史分钟K线接口:京市Pro版分时批量
java·人工智能·python
天天被压力3 小时前
【A股分钟级高频数据完全手册 #08】股票日、分时数据接口对比:普通分时与Pro版差异实测
java·人工智能·python
特立独行的猫A4 小时前
AI 时代,我为什么推荐用 cj-tauri 开发桌面应用
java·后端·python