原地址:

http://www.djangochina.cn/forum.php?mod=viewthread&tid=247

随着项目的逐渐收尾, 对IronPython脚本也越来越熟悉,这里为IronPython脚本感兴趣但不入门的朋友写几篇使用心得,这是第一个:最简单的hello world程序。
        首先,我们必须有一个IronPython脚本引擎库(IronPython.dll),我用的版本是V1.0,你可以在网上直接下到相关源码,编译后即生成IronPython.dll。
1、简单版本Hello World
        新建一个C#桌面程序,引用该库后,我们便开始编写第一个程序。
        下面是C#中的代码:

  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Text;
  7. using System.Windows.Forms;
  8. using IronPython.Hosting;
  9. namespace TestIronPython
  10. {
  11. public partial class Form1 : Form
  12. {
  13. public Form1()
  14. {
  15. InitializeComponent();
  16. }
  17. private void button1_Click(object sender, EventArgs e)
  18. {
  19. PythonEngine scriptEngine = new PythonEngine();
  20. scriptEngine.Execute(textBox1.Text);
  21. }
  22. }
  23. }

复制代码

代码很简单,声明了一个scriptEngine 实例,直接用Execute执行代码即可。下面看看py的代码该怎么写:

  1. import clr
  2. clr.AddReferenceByPartialName("System.Windows.Forms")
  3. clr.AddReferenceByPartialName("System.Drawing")
  4. from System.Windows.Forms import *
  5. from System.Drawing import *
  6. MessageBox.Show("Hello World!")

复制代码

第一句代码很重要,导入.net clr,用clr的AddReferenceByPartialName方法加载我们熟悉的System.Windows.Forms和System.Drawing库,最后可以直接执行.net中的MessageBox方法。
     运行后,直接单击button1,即可弹出一个对话框"Hello World!"
    怎么样,是不是很简单?!

2、数据交互
单单执行脚本是没有什么意思的,最重要的是嵌入的脚本能和宿主语言进行交互,下面我就讲讲这方面的实现。
       IronPython脚本最优秀的地方就是与C#(或者说.net框架集)几乎无缝集成,C#实现的类很容易就传入到脚本中去。(目前唯感遗憾的是,IronPython脚本还没有支持嵌入版,希望不远的的将来能实现嵌入式版本)。
       这是宿主语言的代码:

  1. public partial class Form1 : Form
  2. {
  3. public Form1()
  4. {
  5. InitializeComponent();
  6. }
  7. private void button1_Click(object sender, EventArgs e)
  8. {
  9. PythonEngine scriptEngine = new PythonEngine();
  10. TestData td = new TestData();
  11. td.intNum = 10;
  12. scriptEngine.DefaultModule.Globals["td"] = td;
  13. scriptEngine.Execute(textBox1.Text);
  14. //显示intNum是否被脚本识别并改变
  15. MessageBox.Show(td.intNum.ToString());
  16. }
  17. }
  18. //数据交互类
  19. public class TestData
  20. {
  21. public int intNum = 0;
  22. }

复制代码

上面最关键的代码就是:scriptEngine.DefaultModule.Globals["td"] = td;
    scriptEngine.DefaultModule这是一个字典类,可以添加多个不同类型,供脚本使用。字典中的关键字与脚本中对象的名称保持一致(内容任意,可以和你传的对象名称不一样,关键看你的意愿了)即可。
     脚本对类中的一个变量进行运算,然后把结果显示出来(如下图,对应脚本在文本框里)

怎么样,这个也很简单吧?下一篇文章,我就讲讲 IronPython脚本如何调用C#实现的dll库。

Python脚本调用C#代码数据交互示例(hello world)的更多相关文章

  1. python 全栈开发,Day94(Promise,箭头函数,Django REST framework,生成json数据三种方式,serializers,Postman使用,外部python脚本调用django)

    昨日内容回顾 1. 内容回顾 1. VueX VueX分三部分 1. state 2. mutations 3. actions 存放数据 修改数据的唯一方式 异步操作 修改state中数据的步骤: ...

  2. .net 调用 Python脚本中的代码

    使用工具:IronPython 工具介绍:是一种在 .NET 及 Mono上的 Python 实现,是一个开源的项目,基于微软的 DLR 引擎.(个人理解就是在 .net上面运行Python代码) 使 ...

  3. python的进程间的数据交互

    #先来看下如何实现多进程 # multiprocessing 这个是python的多进程的模块,我们会用到这个模块的很多方法 from multiprocessing import Process i ...

  4. celery 分布式异步任务框架(celery简单使用、celery多任务结构、celery定时任务、celery计划任务、celery在Django项目中使用Python脚本调用Django环境)

    一.celery简介: Celery 是一个强大的 分布式任务队列 的 异步处理框架,它可以让任务的执行完全脱离主程序,甚至可以被分配到其他主机上运行.我们通常使用它来实现异步任务(async tas ...

  5. php外挂python脚本抓取ajax数据

    之前我写过一遍php外挂python脚本处理视频的文章.今天和大家分享下php外挂python实现输入关键字搜索的脚本 首先我们先来分析一波网站: http://www.dzdpw.com/s.php ...

  6. 11 jsp脚本调用java代码

    大多数情况下, jsp 文档的大部分由静态文本(html)构成, 为处理该页面而创建的 servlet 只是将它们原封不动的传递给客户端, 原封不动的传送给客户端有两个小例外: 1. 如果想传送 &l ...

  7. python之 《进程之间数据交互和进程池》

    1.进程q 进程呢就相当于一个房子,线程就相当于是房子里面在工作的人,那么一个房子的空间对于房子里面的人来说是共享的, 现在是多进程,也就是说有许多房子,很显然这个房子的空间只属于这个房子,不会属于其 ...

  8. python脚本调用iftop 统计业务应用流量

    因公司服务器上部署应用较多,在有大并发访问.业务逻辑有问题的情况下反复互相调用或者有异常流量访问的时候,需要对业务应用进行故障定位,所以利用python调用iftop命令来获取应用进程流量,结合zab ...

  9. 使用python脚本从数据库导出数据到excel

    python从数据库导出数据到excel 最近需要从数据库里导出一些数据到excel,刚开始我是使用下面的命令 select * from xxx where xxx into outfile 'xx ...

随机推荐

  1. sizeof strlen strncpy用法总结 结构体实际所占内存大小 以及memset用法

    sizeof测类型(数组名除外) strlen测实际长度 strncpy返回指针类型 #include <stdio.h> #include <stdlib.h> #inclu ...

  2. 安卓UI美化_drawable

    UI美化 drawable资源 ------------------------------------------state drawable资源在不同状态下显示不同的图片在<selector ...

  3. PHP 获取当前日期的上个月的日期

    获取当前日期的上个月的日期 <?php /** *参考有: *http://www.oschina.net/code/snippet_96541_4015 *http://stackoverfl ...

  4. R-大数据分析挖掘(2-R爬虫)

    RCurl作者:

  5. Java动态绑定

    1. 动态绑定 将一个方法调用同一个方法主体关联起来被称作绑定. 在运行时根据对象的类型进行绑定,叫做后期绑定或运行时绑定.Java中除了static方法和final 例如,下面定义了一个Shape类 ...

  6. hazelcast的坑爹事

    转载自 http://blog.csdn.net/hengyunabc/article/details/18514563 简介 开源中国的简介: Hazelcast是一个高度可扩展的数据分发和集群平台 ...

  7. HTML 学习整理

    一.名词解释 一.  HTML : Hypertext Markup Language  超文本标记语言 二.  CSS : Cascading Style Sheet  层叠样式表 三.  浏览器: ...

  8. nyoj832 合并游戏(状态压缩DP)

    题意 : n个石子, 给你一个n*n矩阵, A[i][j]表示第i个和第j个合并蹦出的金币值, 合并完石子 j 消失.求合并所有石子后,所得的最大金币数. 分析 :     1. 题中给的数据范围   ...

  9. Solr使用初探——Solr的安装环境与配置

    Solr是一个apache名下很好用的开源索引.搜索工具,网上的资料虽多但很杂,笔者花了一天的时间对Solr进行了较为初步的研究,对Solr的基础应用做了一定的总结.文中涉及到的配置方法并不唯一,AP ...

  10. Windows下ANSI、Unicode、UTF8字符编码转换

    主意:输入字符串必须是以'\0'结尾,如果输入字符串没有以'\0'结尾,请手动设置,否则转换会有错误. unsigned int EncodeUtil::AnsiToUcs2( char* pAnsi ...