C#调用Python脚本的简单示例

分类:Python

(2311)  (0)  举报  收藏

IronPython是一种在 .NET及 Mono上的 Python实现,由微软的 Jim Hugunin所发起,是一个开源的项目,基于微软的 DLR引擎。IronPython的在CodePlex上的主页:http://ironpython.codeplex.com/

使用场景:

如果你的小伙伴会写Python脚本,而且已经实现大部分项目的功能不需要再用C# 实现。现在缺少窗体,此时Python+C#的组合就可以完美的结局问题啦!

示例:

借由IronPython,就可以利用.NET执行存储在Python脚本中的代码段。下面通过简单的示例说明如何应用C#调用Python脚本。

1、在VS中新建窗体项目:IronPythonDemo

2、VS的菜单中打开“Nuget程序包管理器”

3、搜索IronPython程序包并安装

4、在exe程序所在文件夹下(此例中为".\IronPythonDemo\IronPythonDemo\bin\Debug"),创建Python脚本。或将现有的脚本拷贝到该目录下。Python示例脚本实现求两个数的四则运算:

  1. num1=arg1
  2. num2=arg2
  3. op=arg3
  4. if op==1:
  5. result=num1+num2
  6. elif op==2:
  7. result=num1-num2
  8. elif op==3:
  9. result=num1*num2
  10. else:
  11. result=num1*1.0/num2

5、修改工程的配置文件App.config如下:

其中microsoft.scripting节点中设置了IronPython语言引擎的几个属性。

  1. <?xml version="1.0" encoding="utf-8" ?>
  2. <configuration>
  3. <configSections>
  4. <section name="microsoft.scripting" type="Microsoft.Scripting.Hosting.Configuration.Section, Microsoft.Scripting"/>
  5. </configSections>
  6. <microsoft.scripting>
  7. <languages>
  8. <language names="IronPython;Python;py" extensions=".py" displayName="Python" type="IronPython.Runtime.PythonContext, IronPython"/>
  9. </languages>
  10. </microsoft.scripting>
  11. <startup>
  12. <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
  13. </startup>
  14. </configuration>

6、 绘制窗体如下:

7、编写计算的函数:

  1. private void btnCalculate_Click(object sender, EventArgs e)
  2. {
  3. ScriptRuntime scriptRuntime = ScriptRuntime.CreateFromConfiguration();
  4. ScriptEngine rbEng = scriptRuntime.GetEngine("python");
  5. ScriptSource source = rbEng.CreateScriptSourceFromFile("IronPythonDemo.py");//设置脚本文件
  6. ScriptScope scope = rbEng.CreateScope();
  7. try
  8. {
  9. //设置参数
  10. scope.SetVariable("arg1",Convert.ToInt32(txtNum1.Text));
  11. scope.SetVariable("arg2", Convert.ToInt32(txtNum2.Text));
  12. scope.SetVariable("arg3", operation.SelectedIndex+1);
  13. }
  14. catch (Exception)
  15. {
  16. MessageBox.Show("输入有误。");
  17. }
  18. source.Execute(scope);
  19. labelResult.Text = scope.GetVariable("result").ToString();
  20. }

8、编译运行可得计算结果(此处未做输入的检查)

 
 

版权声明:本文为博主原创文章,未经博主允许不得转载。

C#调用Python脚本的简单示例的更多相关文章

  1. linux+php+apache web调用python脚本权限问题解决方案

    lamp : linux + apache + mysql + php 在上篇随笔中linux+php+apache调用python脚本时出现的问题的根本原因是:apache运行时使用的apache用 ...

  2. zabbix 调用python脚本监控 磁盘剩余空间(创建模版,创建监控项,创建触发器)

    主要 记录一下  使用zabbix 自己创建模版.监控项.触发器,并调用python脚本. 需求: 监控备份机磁盘剩余空间(windows系统) 一.安装zabbix_agent 比较简单 修改配置文 ...

  3. jenkins发布程序触发shell调用python脚本刷新akamai cdn api

    刷新cdn的流程:jenkins获取git中的代码,触发脚本推送到生产环境中(即cdn的源站) --> 触发脚本获取git工作目录的更新列表,将更新列表拼凑成带域名信息的url,写入到目录中 - ...

  4. 通过Java调用Python脚本

    在进行开发的过程中,偶尔会遇到需要使用Java调用Python脚本的时候,毕竟Python在诸如爬虫,以及科学计算等方面具有天然的优势.最近在工作中遇到需要在Java程序中调用已经写好的Python程 ...

  5. linux+php+apache web调用python脚本权限问题

    lamp : linux + apache + mysql + php 在近期项目中使用 linux + apache + php调用python脚本是出现以下权限问题: build/bdist.li ...

  6. PHP 调用Python脚本

    上次做用户反馈自动翻译,写了个python脚本,将日文的用户反馈翻译成中文,效果虽然可以,但其它不懂python的童鞋就没法使用了,所以搭了个web服务,让其他人可以通过网页访问查询.使用的是apac ...

  7. C++中调用Python脚本

    C++中调用Python脚本的意义就不讲了,至少你可以把它当成文本形式的动态链接库, 需要的时候还可以改一改,只要不改变接口, C++的程序一旦编译好了,再改就没那么方便了 先看Python的代码 代 ...

  8. java调用python脚本并向python脚本传递参数

    1.安装Eclipse 先安装jdk,再安装Eclipse,成功后开始建立py_java项目,在这个项目的存储目录SRC下建立test包,在test包中New-Class,新建MyDemo类,建好完成 ...

  9. Window环境下,PHP调用Python脚本

    参考 php调用python脚本*** php 调用 python脚本的方法 解决办法:php提供了许多调用其他脚本或程序的方法,比如exec/system/popen/proc_open/passt ...

随机推荐

  1. DBGridEh 在粘贴中文时出现乱码和错位 100zhx_888]

    http://www.fx114.net/qa-29-3439.aspx 回复于: -- :: unit DBGridEh; 把下面这个函数替换成这样 procedure TDBGridInplace ...

  2. OPENWRT常用设置

    常用设置: 计划任务,定时重启 系统--计划任务,每行一个计划任务. 然后是计划任务列表的格式: [minute] [hour] [day of month] [month] [day of week ...

  3. struts2返回json字符串

    参考链接:http://www.cnblogs.com/starsli/p/4733669.html 1.通过使用struts2-json-plugin 插件来实现 2.通过收到使用json-lib提 ...

  4. L1-023 输出GPLT

    给定一个长度不超过10000的.仅由英文字母构成的字符串.请将字符重新调整顺序,按GPLTGPLT....这样的顺序输出,并忽略其它字符.当然,四种字符(不区分大小写)的个数不一定是一样多的,若某种字 ...

  5. 玩转X-CTR100 l STM32F4 l UCOS-III移植

    我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] 概述 前后台系统 简单的小型系统设计一般是基于前后台 ...

  6. MyEclipse持续性开发教程:用JPA和Spring管理数据(五)

    MyEclipse 3.15 Style——在线购买低至75折!火爆开抢>> [MyEclipse最新版下载] 本教程介绍了MyEclipse中的一些基于JPA / Spring的功能.有 ...

  7. NBUT 1225 NEW RDSP MODE I 2010辽宁省赛

    Time limit  1000 ms Memory limit  131072 kB Little A has became fascinated with the game Dota recent ...

  8. rest_cherrypy

    一.简介 A REST API FOR SALT 二.安装,配置 yum -y install salt-api rest_cherrypy: port: # disable_ssl: True ss ...

  9. vue2.0分页组件,

    pagination.vue <!-- 表格分页组件 --> <template> <nav class="boot-nav"> <ul ...

  10. opencv-python教程学习系列12-图像阈值

    前言 opencv-python教程学习系列记录学习python-opencv过程的点滴,本文主要介绍图像阈值/二值化,坚持学习,共同进步. 系列教程参照OpenCV-Python中文教程: 系统环境 ...