当前位置: 首页 > news >正文

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 + yexcept Exception as err:return str(err)def arrSum(arr):try:sum = 0for i in arr:sum += ireturn sumexcept 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 int[3] { 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运行环境。

end

相关文章:

C# 调用Python

一、简介 IronPython 是一种在 NET 和 Mono 上实现的 Python 语言,由 Jim Hugunin(同时也是 Jython 创造者)所创造。 Python是一种跨平台的计算机程序设计语言。 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。 Python是…...

51单片机最强模块化封装(3)

文章目录 前言一、创建smg文件,添加smg文件路径二、smg文件编写三、模块化测试总结前言 本篇文章将带大家继续封装我们的代码。 这里我们会封装数码管的操作函数。 一、创建smg文件,添加smg文件路径 这里的操作就不过多解释了,大家自行看前面的文章即可。 51单片机模块化…...

【CSS 布局】水平垂直居中

CSS 布局-水平垂直居中 一、水平居中 创建一个父盒子&#xff0c;和子盒子 <div class"parent"><div class"child"></div> </div>基本样式如下 .parent {background-color: #fff; }.child {background-color: #999;width: 100p…...

【C++】类和对象--类的6个默认成员函数

目录1.类的6个默认成员函数2.构造函数2.1概念2.2特性3.析构函数3.1概念3.2特性4.拷贝构造函数4.1概念4.2特征5.赋值运算符重载5.1运算符重载5.2赋值运算符重载5.3前置和后置重载5.4流插入和流提取运算符重载6.const成员7.取地址重载和const取地址操作符重载1.类的6个默认成员函…...

常见面试题---------如何处理MQ消息丢失的问题?

如何处理MQ消息丢失的问题? RabbitMQ丢失消息分为如下几种情况&#xff1a; 生产者丢消息&#xff1a; 生产者将数据发送到RabbitMQ的时候&#xff0c;可能在传输过程中因为网络等问题而将数据弄丢了。 RabbitMQ自己丢消息&#xff1a; 如果没有开启RabbitMQ的持久化&#x…...

十四、Linux网络:高级IO

目录 五种IO模型 同步IO 阻塞IO 非阻塞IO 信号驱动IO IO多路转接 异步IO...

带你走进API安全的知识海洋

Part1什么是API API&#xff08;Application Programming Interface&#xff0c;应用程序接口&#xff09;是一些预先定义的接口&#xff08;如函数、HTTP接口&#xff09;&#xff0c;或指软件系统不同组成部分衔接的约定。用来提供应用程序与开发人员基于某软件或硬件得以访…...

【Java】TCP的三次握手和四次挥手

三次握手 TCP三次握手是一个经典的面试题&#xff0c;它指的是TCP在传递数据之前需要进行三次交互才能正式建立连接&#xff0c;并进行数据传递。&#xff08;客户端主动发起的&#xff09;TCP之所以需要三次握手是因为TCP双方都是全双工的。 什么是全双工&#xff1f; TCP任何…...

JUC并发编程

1.什么是JUC java.util工具包、包、分类 业务&#xff1a;普通业务线程代码 Thread Runable: 没有返回值、效率相比Callable相对较低。 2.线程和进程 进程&#xff1a;一个程序&#xff0c;QQ.exe Music.exe 程序的集合 一个进程往往可以包含多个线程&#xff0c;至少包含一个…...

概率统计·假设检验【正态总体均值的假设检验、正态总体方差的假设检验】

均值假设检验定义 2类错误 第1类错误&#xff08;弃真&#xff09;&#xff1a;当原假设H0为真&#xff0c;观察值却落入拒绝域&#xff0c;因而拒 绝H0这类错误是“以真为假” 犯第一类错误的概率显著性水平α第2类错误&#xff08;取伪&#xff09;&#xff1a;当原假设H0不…...

如何预测机组设备健康状态?你可能需要这套解决方案

1. 应用场景随机振动[注1]会发生在工业物联网的各个场景中&#xff0c;包括产线机组设备的运行、运输设备的移动、试验仪器的运行等等。通过分析采集到的振动信号可以预估设备的疲劳年限、及时知晓设备已发生的异常以及预测未来仪器可能发生的异常等等。本篇教程会提供给有该方…...

C++类和对象:面向对象编程的核心。| 面向对象还编什么程啊,活该你是单身狗。

&#x1f451;专栏内容&#xff1a;C学习笔记⛪个人主页&#xff1a;子夜的星的主页&#x1f495;座右铭&#xff1a;日拱一卒&#xff0c;功不唐捐 文章目录一、前言二、面向对象编程三、类和对象1、类的引入2、类的定义Ⅰ、声明和定义在一起Ⅱ、声明和定义分开Ⅲ、成员变量命…...

CUDA虚拟内存管理

CUDA中的虚拟内存管理 文章目录CUDA中的虚拟内存管理1. Introduction2. Query for support3. Allocating Physical Memory3.1. Shareable Memory Allocations3.2. Memory Type3.2.1. Compressible Memory4. Reserving a Virtual Address Range5. Virtual Aliasing Support6. Ma…...

线程池小结

什么是线程池 线程池其实就是一种多线程处理形式&#xff0c;处理过程中可以将任务添加到队列中&#xff0c;然后在创建线程后自动启动这些任务。这里的线程就是我们前面学过的线程,这里的任务就是我们前面学过的实现了Runnable或Callable接口的实例对象; 为什么使用线程池 …...

vue3状态管理模式 Pinia

状态管理库 Pinia是Vue的专属状态管理库&#xff0c;它允许你跨组件或页面共享状态 1&#xff1a;安装与使用pinia 1.1 安装语法&#xff1a;npm install pinia1.2 创建一个pinia&#xff08;根存储&#xff09;并将其传递给应用程序 import { createApp } from vue import…...

python基于django的自媒体社区交流平台

自媒体社区平台采用python技术,基于django框架,mysql数据库进行开发,实现了以下功能&#xff1a; 本系统主要包括管理员,用户,商家和普通管理员四个角色组成,主要包括以下功能&#xff1a; 1;前台&#xff1a;首页、需求通告、优质案例、帮助中心、意见反馈、个人中心、后台管理…...

Python中类和对象(2)

1.继承 Python 的类是支持继承的&#xff1a;它可以使用现有类的所有功能&#xff0c;并在无需重新编写代码的情况下对这些功能进行扩展。 通过继承创建的新类称为 “子类”&#xff0c;被继承的类称为 “父类”、“基类” 或 “超类”。 继承语法是将父类写在子类类名后面的…...

SpringMvc入门

Spring与Web环境的集成 1.ApplicationContext应用上下文的获取方式 分析 之前获取应用上下文对象每次都是从容器中获取&#xff0c;编写时都需要new ClasspathXmlApplicationContext(Spring配置文件)&#xff0c;这样的弊端就是配置加载多次应用上下文就创建多次。 在Web项目…...

设计模式之单例模式(C++)

作者&#xff1a;翟天保Steven 版权声明&#xff1a;著作权归作者所有&#xff0c;商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处 一、单例模式是什么&#xff1f; 单例模式是一种创建型的软件设计模式&#xff0c;在工程项目中非常常见。通过单例模式的设计&am…...

贪心算法(基础)

目录 一、什么是贪心&#xff1f; &#xff08;一&#xff09;以教室调度问题为例 1. 问题 2. 具体做法如下 3. 因此将在这间教室上如下三堂课 4. 结论 &#xff08;二&#xff09;贪心算法介绍 1. 贪心算法一般解题步骤 二、最优装载问题 &#xff08;一&#xf…...

【九宫格坐标排列 Objective-C语言】

一、这个案例做好之后的效果如图: 1.这个下载是可以点击的,当你点击之后,弹出一个框,过一会儿,框框自动消失,这里变成“已安装” 2.那么,我现在先问大家一句话:大家认为在这一个应用里面,它包含几个控件, 3个,哪3个:一个是图片框,一个是Label,一个是按钮, 这…...

Tomcat简介

目录 一、Tomcat简介 二、下载安装Tomcat 三、利用Tomcat部署静态页面 一、Tomcat简介 Tomcat是一个HTTP服务器&#xff0c;可以按照HTTP的格式来解析请求来调用用户指定的相关代码然后按照HTTP的格式来构造返回数据。 二、下载安装Tomcat 进入Tomcat官网选择与自己电脑…...

Python基础及函数解读(深度学习)

一、语句1.加注释单行注释&#xff1a;&#xff08;1&#xff09;在代码上面加注释&#xff1a; # 后面跟一个空格&#xff08;2&#xff09;在代码后面加注释&#xff1a;和代码相距两个空格&#xff0c; # 后面再跟一个空格多行注释&#xff1a;按住shift 点击三次"&am…...

车道线检测-PolyLaneNet 论文学习笔记

论文&#xff1a;《PolyLaneNet: Lane Estimation via Deep Polynomial Regression》代码&#xff1a;https://github.com/lucastabelini/PolyLaneNet地址&#xff1a;https://arxiv.org/pdf/2004.10924.pdf参考&#xff1a;https://blog.csdn.net/sinat_17456165/article/deta…...

GO——接口(下)

接口接口值警告&#xff1a;一个包含空指针值的接口不是nil接口sort.Interface接口http.Handler接口类型断言类型分支接口值 接口值&#xff0c;由两个部分组成&#xff0c;一个具体的类型和那个类型的值。它们被称为接口的动态类型和动态值。对于像Go语言这种静态类型的语言&…...

计算机网络之http02| HTTPS HTTP1.1的优化

post与get请求的区别 get 是获取资源&#xff0c;Post是向指定URI提交资源&#xff0c;相关信息放在body里 2.http有哪些优点 &#xff08;1&#xff09;简单 报文只有报文首部和报文主体&#xff0c;易于理解 &#xff08;2&#xff09;灵活易拓展 URI相应码、首部字段都没有…...

基于matlab使用神经网络清除海杂波

一、前言此示例演示如何使用深度学习工具箱™训练和评估卷积神经网络&#xff0c;以消除海上雷达 PPI 图像中的杂波返回。深度学习工具箱提供了一个框架&#xff0c;用于设计和实现具有算法、预训练模型和应用程序的深度神经网络。二、数据集该数据集包含 84 对合成雷达图像。每…...

每天10个前端小知识 【Day 8】

前端面试基础知识题 1. Javascript中如何实现函数缓存&#xff1f;函数缓存有哪些应用场景&#xff1f; 函数缓存&#xff0c;就是将函数运算过的结果进行缓存。本质上就是用空间&#xff08;缓存存储&#xff09;换时间&#xff08;计算过程&#xff09;&#xff0c; 常用于…...

【项目精选】基于Java的敬老院管理系统的设计和实现

本系统主要是针对敬老院工作人员即管理员和员工设计的。敬老院管理系统 将IT技术为养老院提供一个接口便于管理信息,存储老人个人信息和其他信息,查找 和更新信息的养老院档案,节省了员工的劳动时间,大大降低了成本。 其主要功能包括&#xff1a; 系统管理员用户功能介绍&#…...

Spark SQL 介绍

文章目录Spark SQL1、Hive on SparkSQL2、SparkSQL 优点3、SparkSQL 特点1) 容易整合2) 统一的数据访问3) 兼容 Hive4) 标准的数据连接4、DataFrame 是什么5、DataSet 是什么Spark SQL Spark SQL 是 Spark 用于结构化数据(structured data) 处理的Spark模块。 1、Hive on Spa…...

网站seo关键词排名推广/seo公司seo教程

Linux操作系统上安装oracle 10g&#xff0c;在启动dbca的时候报 Exception in thread "main" 错误&#xff0c;详细内容如下&#xff1a;[oraclecentos ~]$ dbca Exception in thread "main" [oraclerac1 ~]$ 经检查dbca的log如下&#xff1a;[oraclecento…...

做网站必须知道的问题/福州百度网站排名优化

课程首页地址&#xff1a;http://blog.csdn.net/sxhelijian/article/details/7910565【项目3&#xff1a;乘法口诀表】编程序&#xff0c;输出一个乘法口诀表&#xff0c;形如1x111x22 2x24 1x33 2x36 3x39…… #include <iostream> using namespace std; int mai…...

做图文链接网站/一个新手如何推销产品

Windows 10系统是微软独立发布的最后一个Windows版本&#xff0c;下一代Windows都将作为更新形式出现&#xff0c;因此&#xff0c;WIN10都会开启自动更新&#xff0c;当我们使用电脑WIN10的时候&#xff0c;老是提示我们需要更新系统&#xff0c;很烦人&#xff0c;那么怎么关…...

百度做网站价格/资深seo顾问

一、题目&#xff1a;判断一个链表是否为回文结构 简单思路&#xff1a;时间O&#xff08;N)&#xff0c;空间O&#xff08;N&#xff09; 采用栈来存储链表值&#xff0c;再从栈中弹出值&#xff08;逆序&#xff09;&#xff0c;如果和链表顺序值一样&#xff0c;则为回文结构…...

linux网站开发工具/怎么快速刷排名

CometAjax是一种从页面向服务器请求数据的技术&#xff0c;而Comet则是一种服务器向页面推送数据的技术。Comet能够让信息近乎实时地被推送到页面上有两种实现Comet的方式&#xff1a;长轮询和流 1、轮询 1&#xff09;短轮询&#xff1a;浏览器定时向服务器发送请求&#xff0…...

推广网站链接怎么做/百度口碑网

KEIL uVision&#xff0c;KEIL MDK&#xff0c;KEIL For ARM&#xff0c;RealView MDK&#xff0c;KEIL C51&#xff0c;KEIL C166&#xff0c;KEIL C251 从接触MCS-51单片机开始&#xff0c;我们就知道有一个叫KEIL的软件。在开发单片机时&#xff0c;使用的是C语言或者汇编语…...