zoukankan      html  css  js  c++  java
  • Visual Studio 2010 开发与调试IronPython脚本 为你的ERP/MIS 应用程序添加脚本功能

    时间过得真快,Visual Studio 2010推出来快两年了,.NET 4.0也逐渐普及。.NET 4里面有一项重要的功能,就是动态语言,可以在.NET代码中直接调用第三方的动态语言脚本,请参考下面的例子程序

    ScriptRuntime py = Python.CreateRuntime();
    //Dynamic feature only works on objects typed as 'dynamic'
    dynamic helloworld = py.UseFile("helloworld.py");
    
    Console.WriteLine("helloworld.py loaded!");
    for (int i = 0; i < 1000; i++)
    {
          Console.WriteLine(helloworld.welcome("Employee #{0}"), i);
    }

    这是Visual Studio 2010中使用IronPython的例子,为了运行这个程序,请下载IronPython, 例子中的的源代码如下

    def welcome(name):
          return "Hello '" + name + "' from IronPython"

    学到了这么多技术,最终都是为了改善产品,改善系统的可维护性。在之前的文章中我提到为应用程序添加脚本功能,可产生定制的动态的代码块,然后返回执行结果。这项功能为应用程序的灵活性提供了极大的方便。我在工作流的表达式求值,工资公式编辑器中有提到动态脚本Script.NET的能力。然而Script.NET停止开发很久了,而且我一直期盼的调试功能又没有实现出来。自己参考SharpDevelop做script debugger,没有结果,只好暂时停止对Script.NET的进一步探索与应用。现有IronPython 2.7.1 已经直接做成了Visual Studio的解决方案项目,简单方便省事。

    image

    几乎不用任何配置,直接安装下载回到的IronPython-2.7.1安装文件即可,它会为你的Visual Studio创建Python项目模板。在x86的电脑上,可以产生四个类型的项目模板,Console Application,WinForms Application,IronPython Silverlight Web Page,Wpf Application,而在x64的平台上,只产生了Console Application项目模板。

    但是,这样还有点不方便,Python在这里被当成脚本语言,它的Build Action=None,意味着没有任何编译行为,这样会给代码的调试工作带来不方便之处。需要安装工具Python Tools for Visual Studio。

    先卸载已经安装的IronPython工具包,才能继续安装Python Tools for Visual Studio。安装完成之后,项目模板又多了二项模板,Python Application和Python MPI Application。新建立一个Python Application项目

    image

    请先到Tools->Options的Python Tools中新建一个Interpreter,在Interpreter Options中点击Add Interpreter按钮,保存退出即可。然后就可直接在编辑器中放断点,调试的体验和调试.NET语言一样,Call Stask,Intermediate Window,Watch窗口都可用,这种感觉是相当的方便。再看看Program.py的文件属性,它的Build Action=Compile。

    在安装工具包的同时,也同时会安装Python的命令行交互程序,这个程序可以当计算器用,直接输入表达式的值,它可以马上帮助你计算出结果。再来看看下面的Python的两个例子代码,以帮助你了解和学习这种语言。

    Lambda表达式,这个可以简化代码的编写,请看Python的实现

    func = lambda s: s * 3
    print func("peter ")  
    
    func2 = lambda a, b: a * b
    print func2(2, 3)  

    调试这段代码,在Output窗口可以显示它的执行结果。Lambda表达式减少了很多不必要的代码。

    Python的for循环语句,它的一种写法是这样的

    for i in range(0, 10,2):
        print i

    起始变量0,10是终止变量(不包括10),2是步长。.NET 4中引入了并行循环,它的代码例子如下

    Parallel.For(0, Int64.MaxValue, i =>
                {
                     
                     Console.WriteLine("i={0},thread id={1}", i, Thread.CurrentThread.ManagedThreadId);
                     Thread.Sleep(1000);
                });
     

    整理一下文章的思路,您首先要选择一门脚本语言,来为你的应用程序提供动态代码执行能力。在这里,我选择Python语言,并选择它的.NET实现版本IronPython。其次,我要对脚本与.NET host之间的代码互操作有所了解,如何把.NET的变量传到脚本中,如何传回脚本的执行结果到.NET代码中。最后,我需要一个灵活方便的脚本编辑工具,并且可以提供强大的调试功能。

  • 相关阅读:
    正则表达式
    理解CPU steal time
    装饰器(带参数)
    装饰器(入门)
    递归
    冒泡算法
    Chrome for Mac键盘快捷键!来自Google Chrome官网!
    swoole深入学习 4. process
    通俗讲解 异步,非阻塞和 IO 复用
    swoole深入学习 3. upd Server和udp Client
  • 原文地址:https://www.cnblogs.com/JamesLi2015/p/2312678.html
Copyright © 2011-2022 走看看