C# 调用Python

这篇具有很好参考价值的文章主要介绍了C# 调用Python。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、简介

IronPython 是一种在 NET 和 Mono 上实现的 Python 语言,由 Jim Hugunin(同时也是 Jython 创造者)所创造。
Python是一种跨平台的计算机程序设计语言。 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。
Python是一种解释型脚本语言,可以应用于以下领域:
● 科学计算和统计
● 人工智能
● 桌面界面开发
● 软件开发
● 后端开发
● 网络爬虫

 二、创建 C# 项目

新建一个 Winform 项目 CSharpCallPython

c#调用python,C#,c#,python

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

c#调用python,C#,c#,python

三、C# 调用 Python

1.IronPython 插件

在 NuGet 中安装 IronPython 插件

c#调用python,C#,c#,python

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

c#调用python,C#,c#,python

在 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 界面只需要添加一个按钮即可

c#调用python,C#,c#,python

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);
        }

    }
}

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

c#调用python,C#,c#,python

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文章来源地址https://www.toymoban.com/news/detail-790784.html

到了这里,关于C# 调用Python的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 通过python在unity里调用C#接口

    log: 背景 最近在做虚拟人底层驱动sdk测试,因为后端使用的是C#,我个人更倾向于python编程辅助测试工作,测试sdk需要通过开发提供的接口方法文档,通过传测试场景参数调用方法进行单元测试 技术工具 项目语言 C# 项目工具 unity 测试语言 python3 实现过程 1.首先需要在unity安装

    2024年02月04日
    浏览(24)
  • c#和Python交互,完美解决Python调用OpenCV等第三方库以及分发时需配置python环境的问题

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 关于C#如何调用Python,网上提供了很多解决方案,有用ironPython的,也有把python代码打包成exe的,还有通过process类调用python的,但这些方案或多或少都有一些缺陷,比如ironPython无法调用第三方库,打包成

    2024年02月05日
    浏览(29)
  • [软件工具]opencv-svm快速训练助手教程解决opencv C++ SVM模型训练与分类实现任务支持C# python调用

    opencv中已经提供了svm算法可以对图像实现多分类,使用svm算法对图像分类的任务多用于场景简单且对时间有要求的场景,因为opencv的svm训练一般只需要很短时间就可以完成训练任务。但是目前网上没有一个工具很好解决训练问题,大部分需要自己编程去实现训练任务,这个对

    2024年02月06日
    浏览(43)
  • stable-diffusion.cpp 一个文件解决stable diffusion所有环境,不需要python,stable-diffusion.dll动态库C#调用Demo

    stable-diffusion.cpp 一个文件解决stable-diffusion所有环境,不需要python,stable-diffusion.dll动态库C#调用Demo 目录 介绍 效果 Text To Image Image To Image Upscale 项目 代码 Native.cs SDHelper.cs MainForm.cs 下载  stable-diffusion.cpp 地址:https://github.com/leejet/stable-diffusion.cpp StableDiffusionSharp 地址:https://

    2024年04月14日
    浏览(36)
  • 【C#】C#调用进程打开一个exe程序

    新建WinForm程序,并写入代码,明确要调用的程序的绝对路径(或相对路径)下的exe文件。 调用代码: 这里我调用的另一个程序的路径是: F:WindowsFormsApplication2WindowsFormsApplication2binDebugWindowsFormsApplication2.exe 你可以把这个路径改成你自己要调用的程序的路径。 运行起来,点

    2024年02月09日
    浏览(32)
  • C#实现系统进程的调用,查看进程调用的模块

    1.需要使用命名空间:System.Diagnostics; 2.Process.GetProcess()可以获取所有进程 3.获取进程调用的模块         ProcessModuleCollection modules = currentProcess.Modules;         foreach循环一下FileName就可以查看调用了什么dll文件了 4.有关进程的信息(Process里面有的属性):         Id:经常唯

    2024年02月16日
    浏览(31)
  • C#调用Dapper

    Dapper是一种微型ORM(对象关系映射器)工具,可以帮助.NET开发人员轻松地处理数据库操作。它适用于许多数据库提供程序,包括SQL Server、MySQL、Oracle和PostgreSQL等。以下是Dapper的使用介绍: 安装Dapper NuGet包:在Visual Studio解决方案中,右键单击项目名称,选择“管理NuGet程序包

    2024年02月09日
    浏览(28)
  • Java调用C#

    由于项目采用Hybrid热更,走纯C#开发,目前战斗由客户端到服务端(客户端提供dll),服务端负责调用,故需要走Java 调C# dll逻辑。 1、JNI:不支持泛型(pb)没法转C++成功 2、JNA:亲测可用。原理Java调用C++ ,C++调C# 操作步骤:         1、生成C#dll,放在java工程所用的jdk,bin目

    2024年02月05日
    浏览(10)
  • C#调用WinAPI部分命令

     C#是针对WIndows而生的,开发WIndows应用最快。然而想要让自己程序进阶,就不需深入Windows底层,WinAPI为我们提供了一把利刃。 目录 1、查找窗口句柄 2、查找窗口内子对象 3、指定窗口样式 4、指定窗口扩展样式 5、调整窗口大小Z轴(层叠) 6、获得窗口样式 7、向窗口发送命

    2024年01月19日
    浏览(30)
  • C# webapi接口调用实例

    书接上回C# WebServiceWebApi接口项目创建,在demo的基础上进行webapi接口调用实例开发。 WebApi接口项目public分支https://gitee.com/xiuhuang/webapi_demo 进行接口调用的类库项目public分支https://gitee.com/xiuhuang/dll_demo 下文中提到的所有修改都可以在gitee上看到与demo的修改处直观对比,并且复制

    2024年02月07日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包